basename是一个命令行程序,可从给定的文件名中删除目录和后缀。

使用basename命令

basename命令支持两种语法格式:

basename NAME [SUFFIX]
basename OPTION... NAME...

basename取文件名并打印文件名的最后一部分。 (可选)它也可以删除任何结尾的后缀。 这是一个简单的命令,仅接受一些选项。

最基本的示例是在删除前导目录的情况下打印文件名:

basename /etc/passwd

输出仅包含文件名:

passwd

basename命令删除所有后缀/字符:

basename /usr/local/
basename /usr/local

这两个命令将产生相同的输出:

local
local

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

多个输入

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

例如,要获取/etc/passwd/etc/shadow的文件名,应运行:

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

删除结尾的后缀

要从文件名中删除任何后缀,请将后缀作为第二个参数传递:

basename /etc/hostname name
host

通常,此功能用于删除文件扩展名:

basename /etc/sysctl.conf .conf
sysctl

删除结尾后缀的另一种方法是使用-s--suffix=SUFFIX)选项指定后缀:

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

此语法格式可让您从多个名称中删除任何结尾的后缀:

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

范例

以下示例显示如何在bash for循环中使用basename命令来替换当前目录中以“ .jpeg”结尾的所有文件的重命名。 文件扩展名从“ .jpeg”到“ .jpg”:

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

如果您将bash用作shell程序,而不是调用basename,则可以使用 Shell Parameter Expansion 来剥离尾随扩展名。

结论

basename命令从名称中删除任何前导目录和后缀。

如果您有任何问题或反馈,请随时发表评论。