Linux基础-shell提取文件名和路径

Linux基础-shell提取文件名和路径最近处理 docker registry 镜像仓库 需要提取文件和路径 所以大概总结了下 shell 下提取文件和路径的方式

欢迎大家来到IT世界,在知识的湖畔探索吧!

最近处理docker registry镜像仓库,需要提取文件和路径,所以大概总结了下shell下提取文件和路径的方式。

Linux基础-shell提取文件名和路径



欢迎大家来到IT世界,在知识的湖畔探索吧!

示例字符串

strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link" strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data"

欢迎大家来到IT世界,在知识的湖畔探索吧!

registry镜像的link路径以及data路径。/docker/registry/v2/。

01 获取文件名

basename命令

CentOS7 shell的软件coreutils提供了basename,从字符串中去除目录,来提取文件名。

欢迎大家来到IT世界,在知识的湖畔探索吧!strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link" strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data" # basename "$strings_link" link # basename "$strings_data" data # realpath "$strings_link" /app/registry/docker/registry/v2/repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link

basename不会去判断文件或者路径是否真实存在,只是字符串处理,最后一个字符/后的字符串提取。

realpath是提去文件的绝对路径。

awk命令

awk是通过分隔符’/’,提取最后一列数据即为文件名。

strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link" strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data" # echo "$strings_link" |awk -F'/' '{print $NF}' link # echo "$strings_data" |awk -F'/' '{print $NF}' data

NF(The number of fields)为当前输入记录的字段数,即最后一列。

shell ${}处理,${var*/}

${strings_link*/}:去掉变量从左边算起的最后一个/字符及其左边的内容保留的值是左边最后一个/(不包含)右边所有内容

欢迎大家来到IT世界,在知识的湖畔探索吧!strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link" strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data" # echo ${strings_link*/} link # echo ${strings_data*/} data

#是删除左边最小匹配,删除左边最大匹配;%是删除右边最小匹配,%%删除右边最大匹配;

换句话来说,#总是表示左边算起,%总是表示右边算起。

02 获取路径

dirname命令

CentOS7 shell的软件coreutils提供了dirname,从字符串中去除文件名,来提取目录。

strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link" strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data" # dirname "$strings_link" repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872 # dirname "$strings_data" blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e87

dirname不会去判断文件或者路径是否真实存在,只是字符串处理,最后一个字符/前的字符串提取。

awk命令

awk的分隔符也可以是正则表达式,‘/[^/]*$’或者‘/[^/]+$’是匹配到/link做分隔符,$1即为目录。

欢迎大家来到IT世界,在知识的湖畔探索吧!strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link" strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data" # echo $strings_link |awk -F '/[^/]*$' '{print $1}' repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872 # echo $strings_data |awk -F '/[^/]*$' '{print $1}' blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872

在线正则表达式测试

shell ${}处理,${var%/*}

${strings_link%/*}:去掉右边第一个/字符串及其右边的内容保留右边起第一个/(不包含)左边的所有内容

strings_link="repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/link" strings_data="blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872/data" # echo "${strings_link%/*}" repositories/nginx-hello-lu/_manifests/revisions/sha256/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872 # echo "${strings_data%/*}" blobs/sha256/33/33c0399e4e29c56c0306a4e0a0d047699f5f56da39d72f994a07c535c2b3e872
Linux基础-shell提取文件名和路径

on my way!

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/107610.html

(0)
上一篇 7分钟前
下一篇 2025年 12月 2日 下午6:30

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信