今天在做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中,从左到右,第一个字符"."左边的内容。
${}总结 ${}并不是专门为提取文件名或目录名的,它的使用是变量的提取和替换等等操作,它可以提取非常多的内容,并不一定是上面五个例子中的’/‘或’.’。 - \#:表示从左边算起第一个 - %:表示从右边算起第一个 - \##:表示从左边算起最后一个 - %%:表示从右边算起最后一个
这两个都是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,都有自己的索取之处,习惯那个用那个,这里只是记录一下使用方法。
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助
赏