在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
命令从名称中去除任何前导目录和尾随后缀。
如果你有任何问题或反馈意见,请随时留言。
0 个评论