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
命令从名称中删除任何前导目录和后缀。如果您有任何问题或反馈,请随时发表评论。