Linux中shell处理⽂件路径的⽅式
文件名提取
使⽤Linux的shell时,许多时候需要对⽂件名或⽬录名进⾏处理,通常的操作是由路径中提取出⽂件名,从路径中提取出⽬录名,提取⽂件后缀名等等。例如,从路径/h1/h2/h3/h4/student/run.sh中提取也⽂件名run.sh,提取出⽬录/h1/h2,提取出⽂件后缀sh等。
下⾯介绍两种常⽤的⽅法来进⾏相关的操作。
⼀、使⽤${}
1、${var##*/}
该命令的作⽤是去掉变量var从左边算起的最后⼀个'/'字符及其左边的内容,返回从左边算起的最后⼀个'/'(不含该字符)的右边的内容。使⽤例⼦及结果如下:
从运⾏结果可以看到,使⽤该命令,可以提取出我们需要的⽂件名run.sh。
若使⽤时在shell程序⽂件中,可以使⽤变量来保存这个结果,再加以利⽤,如file=${var##*/}。
2、${var##*.}
该命令的作⽤是去掉变量var从左边算起的最后⼀个'.'字符及其左边的内容,返回从左边算起的最后⼀个'.'(不含该字符)的右边的内容。使⽤例⼦及结果如下:
从运⾏结果可以看到,使⽤该命令,可以提取出我们需要的⽂件后缀。
如果⽂件的后缀不仅有⼀个,例如,,命令${var##*.}仅能提取最后⼀个后缀。如果想提取时该怎么办?那么就要⽤下⾯所说的${var#*.}命令了。
3、${var#*.}
该命令的作⽤是去掉变量var从左边算起的第⼀个'.'字符及其左边的内容,返回从左边算起第⼀个'.'(不含该字符)的右边部分的内容。使⽤例⼦及结果如下:
从运⾏结果可以看到,使⽤该命令,可以提取出⽂件的多个后缀。
4、${var%/*}
该命令的使⽤是去掉变量var从右边算起的第⼀个'/'字符及其右边的内容,返回从右边算起的第⼀个'/'(不含该字符)的左边的内容。使⽤例⼦及结果如下:
从运⾏的结果可以看到,使⽤该命令,可以提取出我们需要的⽂件所在的⽬录
5、${var%%.*}
该命令的使⽤是去掉变量var从右边算起的最后⼀个'.'字符及其右边的内容,返回从右边算起的最后⼀个'.'(不含该字符)的左边的内容。使⽤例⼦及结果如下:
当我们需要建⽴⼀个与⽂件名相同名字(没有后缀)的⽬录与对应的⽂件相对应时,就可以使⽤该命令来进⾏操作。例如,解压⽂件的情况就与此类似,我们压缩⽂件file.zip时,会在与file.zip同级⽬录下建⽴⼀个名为file的⽬录。
6、${}总结
其实${}并不是专门为提取⽂件名或⽬录名的,它的使⽤是变量的提取和替换等等操作,它可以提取⾮常多的内容,并不⼀定是上⾯五个例⼦中
的'/'或'.'。也就是说,上⾯的使⽤⽅法只是它使⽤的⼀个特例。