在bash脚本中的文件扩展名之前追加字符串

在bash脚本中的文件扩展名之前追加字符串,bash,Bash,我需要在bash脚本中的文件扩展名之前添加一个数字。例如,我想将像“abc.efg”这样的文件名转换为“abc.001.efg。问题是我不知道文件的扩展名是什么(它是脚本的参数之一) 我在寻找最快的方法 提前感谢,您可以这样做: extension="${file##*.}" # get the extension filename="${file%.*}" # get the filename mv "$fil

我需要在bash脚本中的文件扩展名之前添加一个数字。例如,我想将像“
abc.efg
”这样的文件名转换为“
abc.001.efg
。问题是我不知道文件的扩展名是什么(它是脚本的参数之一)

我在寻找最快的方法


提前感谢,

您可以这样做:

extension="${file##*.}"                     # get the extension
filename="${file%.*}"                       # get the filename
mv "$file" "${filename}001.${extension}"    # rename file by moving it
您可以在的优秀答案中看到有关这些命令的更多信息

试验 让我们重命名这些文件:

$ for file in hello*; do ext="${file##*.}"; filename="${file%.*}"; mv "$file" "${filename}001.${ext}"; done
大昌

$ ls hello*
hello001.doc  hello001.txt
您可以使用以上一个内衬构建
mv
cmd

例如:

kent$  echo "abc.bar.blah.hello.foo"|sed 's/\.[^.]*$/.001&/' 
abc.bar.blah.hello.001.foo

如果您的文件扩展名是在变量EXT中,而您的文件是在变量文件中,那么类似的方法应该可以工作

EXT=ext;FILE=file.ext;echo ${FILE/%$EXT/001.$EXT}
这张照片

file.001.ext

替换被锚定到字符串的末尾,因此扩展名是否出现在文件名中无关紧要。此处的更多信息

+1这是正确的方法,唉,BASH不允许您将两个操作合并为一个。谢谢;)我们可以尝试稍微欺骗它,使其几乎成为一行,但我认为一步一步来做更清楚。
EXT=ext;FILE=file.ext;echo ${FILE/%$EXT/001.$EXT}
file.001.ext