Bash从Linux或Unix上的给定路径获取文件名
时间:2020-01-09 10:37:22 来源:igfitidea点击:
如何从给定路径中提取Bash shell脚本中的文件名和扩展名?
如何从bash shell下的路径获取文件名?
可以从在Linux或类似Unix的系统上运行的bash shell脚本中的路径中获取文件名。
可以使用以下任何一种方法来提取bash中的文件名或扩展名。
Bash从给定路径获取文件名
basename命令删除目录和文件名的后缀。
语法非常简单:
basename /path/to/file basename /path/to/file suffix
例子
让我们看看如何从给定文件(例如/bin/ls)中提取文件名。
键入以下基本名称命令:
basename /bin/ls
您可以使用-a选项传递多个参数,如下所示:
basename -a /bin/date /sbin/useradd /nas04/nfs/theitroad/data.tar.gz
将输出存储在shell变量中,运行:
out="$(basename /data/backup-file.tar.gz)" echo "Filename is $out"
如何从文件名中删除extesnion
从backups.tar.gz文件中删除.gz,仅获取backups.tar:
basename /backups/14-nov-2019/backups.tar.gz .gz
或者
basename -s .gz /backups/14-nov-2019/backups.tar.gz # # Bash get filename from path and store in $my_name variable # my_name="$(basename -s .gz /backups/14-nov-2019/backups.tar.gz)" echo "Filename without .gz extension : $my_name"
在Bash中提取文件名和扩展名
从bash手册页:
$字符引入参数扩展,命令替换或算术扩展。
可以将要扩展的参数名称或符号括在括号中,该括号是可选的,但用于保护要扩展的变量不受紧随其后的字符的影响,这些字符可以解释为名称的一部分。
当使用花括号时,匹配的结尾花括号是第一个},而不是由反斜杠或带引号的字符串引起来,并且不在嵌入式算术扩展,命令替换或参数扩展内。
参数扩展的基本形式是${parameter}。
参数的值被替换。
如何在bash shell脚本中提取文件名和扩展名
例如,定义一个名为$input的shell变量。
让我们创建一个名为test.sh的shell脚本:
#!/bin/bash input="/home/Hyman/work/config.ini" # extract config.ini file_name="${input##*/}" # get .ini file_extension="${file_name##*.}" # get config file="${file_name%.*}" # print it echo "Full input file : $input" echo "Filename only : $file_name" echo "File extension only: $file_extension" echo "First part of filename only: $file"
在Linux中执行shell脚本,运行:
chmod +x test.sh ./test.sh bash test.sh