在Linux中的Basename命令

评论 0 浏览 0 2020-12-01

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参数扩展来剥离尾部的扩展。

总结

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

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-08-07
0 个评论