shell 获取文件名和路径名的一些方法

基于 ubuntu 18.04

假设给定文件路径名为
/opt/doc/db/sql/cc.sql
/opt/doc/db/sql/cc.tar.gz

获取文件名

awk解法

resFile=`echo /opt/doc/db/sql/cc.sql | awk -F "/" '{print $NF}'`

官方解法

resFile=`basename /opt/doc/db/sql/cc.sql`
resFile=$(basename $file)   

获取目录名

awk解法

dirPath=`echo /opt/doc/db/sql/cc.sql | awk -F '/[^/]*$' '{print $1}'`

官方解法

dirPath=`dirname /opt/doc/db/sql/cc.sql`

awk+for循环的方法

echo /opt/doc/db/sql/cc.sql | awk 'BEGIN{res=""; FS="/";}{ for(i=2;i<=NF-1;i++) res=(res"/"$i);} END{print res}'

扩展

${} 用于字符串的读取,提取和替换功能,可以使用 ${} 提取字符串 1、提取文件名

# var=/dir1/dir2/file.txt
# echo ${var##*/}
file.txt

2、提取后缀

# var=/dir1/dir2/file.txt
# echo ${var##*.}
txt

3、提取不带后缀的文件名,分两步

# var=/dir1/dir2/file.txt
# tmp=${var##*/}
# echo $tmp
file.txt
# echo ${tmp%.*}
file
  1. 获取路径
# var=/dir1/dir2/file.txt
# echo ${var%/*}
/dir1/dir2
  1. 去尾
# var=/dir1/dir2/file.txt
# echo ${var%%.*}
/dir1/dir2/file
  1. 取后缀
# var=/dir1/dir2/file.tar.gz
# echo ${var#*.}
tar.gz
  1. ${r'${'}}总结
  • ${}的使用是变量的提取和替换等操作;
  • #:表示从左边算起第一个
  • %:表示从右边算起第一个
  • ##:表示从左边算起最后一个
  • %%:表示从右边算起最后一个

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

:表示要删除的内容,对于#和##的情况,它位于指定字符(例子中的'/'和'.')的左边,表于删除指定字符及其左边的内容;
对于%和%%的情况,它位于指定字符(例子中的'/'和'.')的右边,表示删除指定字符及其右边的内容。
这里的'
'的位置不能互换,即不能把*号放在#或##的右边,反之亦然。

  • qq_43638135
    妲己再美究为妃: 博主没有想过自己接一些私活干吗?我现在还没毕业,但是我也确实听说外挂市场自动化游戏脚本市场挺火热的,并且报酬也很丰厚,但是具体的我也不是很清楚,求解答。 (1个月前 #47楼) 查看回复(2) 举报 回复
    22