basename是一个命令行程序,可用于删除指定的文件和目录的后缀。

basename命令支持两种语法格式,分别是basename NAME [SUFFIX]basename OPTION... NAME...

basename可从取文件的完整路径获取文件名。它也可以用于删除文件的扩展名。 这是一个非常简单的命令,仅接受一些选项。

最基本的的用法是在文件的绝对路径获取文件名并打印文件名。basename命令会自动删除目录分隔符后缀/

默认情况下,每行输出以换行符结尾。如果要以NUL结尾,请使用-z/--zero选项。

basename /etc/passwd
basename /usr/local/
basename /usr/local
passwd
local
local

多个文件

basename命令可以接受多个文件名称作为参数。如果要指定多个参数请使用-a/--multiple选项调用命令,然后使用空格分隔文件列表。

例如要获取/etc/passwd/etc/shadow的文件名,请运行命令basename -a /etc/passwd /etc/shadow

basename -a /etc/passwd /etc/shadow
passwd
shadow

删除文件扩展名

要从文件名中删除任何后缀,请将后缀作为第二个参数传递。通常,此功能用于删除文件扩展名。

删除结尾后缀的另一种方法是使用-s/--suffix=SUFFIX选项指定后缀。例如命令basename -s .conf /etc/sysctl.conf将会删除扩展名.conf

你也可以组合选项指定多个文件并指定要删除后缀名称,此语法格式可让您从多个名称中删除任何结尾的后缀。

例如命令basename -a -s .conf /etc/sysctl.conf /etc/sudo.conf组合使用-a和-s选项删除后缀.conf

basename /etc/hostname name
basename /etc/sysctl.conf .conf
basename -s .conf /etc/sysctl.conf

basename -a -s .conf /etc/sysctl.conf /etc/sudo.conf
host
sysctl
sysctl

sysctl
sudo

示例

以下示例显示如何在bash的for循环中使用basename命令来替换当前目录以.jpeg 作为扩展名的文件。

以下脚本将会删除文件的扩展命令.jpeg并将文件扩展名重命名为.jpg

如果您将bash作为默认的shell程序,而又不想调用basename命令,则可以使用 Shell Parameter Expansion 来删除文件的扩展名。

for file in *.jpeg; do
    mv -- "$file" "$(basename $file .jpeg).jpg"
done

结论

basename命令从名称中删除任何前导目录和后缀。如果您有任何问题或反馈,请随时发表评论。