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

