利用shell获取文件名和目录

avatar 2022年6月5日18:15:45 评论 624 次浏览

今天在做gitlab备份的时候,发现gitlab备份的数据文件名中没有小时和分钟,这种文件虽然靠文件创建时间能过区分,但是如果文件目录迁移时间太久就无法找到了,这个问题有点严重,这里就需要用到给备份的文件进行重新命名,加上时间,这个时候就需要通过shell获取文件名和目录,然后重命名了。下面看一下如何使用shell获取文件名和目录吧。

一、${}

[wolf@wulaoer.org🔥🔥🔥🔥 ~]# filename=`ls  /opt/sh/*.tar`
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo $filename
/opt/sh/1654144300_2022_06_02_12.10.14_gitlab_backup.tar
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo ${filename##*/}
1654144300_2022_06_02_12.10.14_gitlab_backup.tar

获取变量$filename中从左到右最后一个字符"/"右边边的内容,也就是文件名。

[wolf@wulaoer.org🔥🔥🔥🔥 ~]#  echo $filename
/opt/sh/1654144300_2022_06_02_12.10.14_gitlab_backup.tar
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo ${filename##*.}
tar

获取变量$filename中从左到右最后一个字符"."右边边的内容,这里使用的"."就是文件的后缀,如果是"_"那么获取的就应该是backup.tar了。

[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo $filename
/opt/sh/1654144300_2022_06_02_12.10.14_gitlab_backup.tar
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo ${filename#*.}
10.14_gitlab_backup.tar

获取变量$filename中从左到右第一个字符"."右边的内容。

[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo $filename
/opt/sh/1654144300_2022_06_02_12.10.14_gitlab_backup.tar
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo ${filename%/*}
/opt/sh

获取变量$filename中,从右到左,第一个字符"/"左边的内容,也就是文件的路径。

[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo $filename
/opt/sh/1654144300_2022_06_02_12.10.14_gitlab_backup.tar
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo ${filename%%.*}
/opt/sh/1654144300_2022_06_02_12

获取变量$filename中,从左到右,第一个字符"."左边的内容。

${}总结

${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的’/‘或’.’。
- \#:表示从左边算起第一个
- %:表示从右边算起第一个
- \##:表示从左边算起最后一个
- %%:表示从右边算起最后一个

二、basename和dirname

这两个都是linux的基本命令,basename主要是获取文件名,dirname是获取的目录,两者不太一样,根据需求选择。

[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo $filename
/opt/sh/1654144300_2022_06_02_12.10.14_gitlab_backup.tar
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo $(basename $filename)
1654144300_2022_06_02_12.10.14_gitlab_backup.tar
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo $(basename $filename .tar)
1654144300_2022_06_02_12.10.14_gitlab_backup
[wolf@wulaoer.org🔥🔥🔥🔥 ~]# echo $(dirname $filename)
/opt/sh

以上是利用shell获取文件名和目录的方法,在使用的时候可以根据需求选择不管是${}还是basename或者dirname,都有自己的索取之处,习惯那个用那个,这里只是记录一下使用方法。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: