目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js springboot win10 电路 vue macOS nginx esp32 windows git docker idea maven esp8266 python Arduino

存档:

X

[ Bash ] 命令进阶:修改文件/字符串名

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

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

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

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

多个文件

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

例如要获取<a href="https://www.myfreax.com/etc-passwd-file/">/etc/passwd</a><a href="https://www.myfreax.com/etc-shadow-file/">/etc/shadow</a>的文件名,请运行命令basename -a /etc/passwd /etc/shadow

删除文件扩展名

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

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

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

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

示例

以下示例显示如何在bash的<a href="https://www.myfreax.com/how-to-rename-files-in-linux/">for</a>循环中使用basename命令来替换当前目录以.jpeg 作为扩展名的文件。

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

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

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

结论

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


标题:[ Bash ] 命令进阶:修改文件/字符串名
作者:llilei
地址:http://solo.llilei.work/articles/2023/10/06/1696597709196.html