如何替换文件扩展名

如何替换文件扩展名

我们要替换脚本文件扩展名

所以我们做了以下事情:

 new_name=` echo run_fix.bash  |  sed 's/[.].*$//' `
 new_file_extension=".in_hold.txt"
 new_name=$new_name$new_file_extension

 echo $new_name
 run_fix.in_hold.txt

但我觉得我的方法不太优雅

注意 - 因为脚本扩展名可以是 bash、perl 或 python,并且目标扩展名可以是“.”之后的任何内容。我们想要全球替换


我使用的是红帽7.2

答案1

old_name=run_fix.bash
new_name=${old_name%.bash}.in_hold.txt

printf 'New name: %s\n' "$new_name"

.bash这将从值中删除文件名后缀$old_name并添加.in_hold.txt到结果中。整个事情将被分配给变量new_name

从 的值中${variable%pattern}删除与模式匹配的最短后缀字符串的扩展是pattern$variable标准参数扩展

取代任何文件名后缀(即文件名中最后一个点之后的任何内容):

new_name=${old_name%.*}.new_suffix

.*模式将匹配最后一个点及其后面的任何内容(这将被删除)。如果您使用%%%不是最长与模式匹配的子字符串将被删除(在这种情况下,您将删除之后的所有内容)第一的字符串中的点)。如果字符串不包含任何点,则它保持不变。

答案2

尝试rename拉里·沃尔的命令。默认情况下,并非在所有系统上安装,有些系统有一个具有此名称的不同命令。它绝对适用于基于 Debian 的系统。

rename用于sed文件名。

相关内容