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

时间:2014-08-04 16:03:18

标签: bash

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

我一直在寻找最快捷的方式。

提前致谢,

3 个答案:

答案 0 :(得分:9)

您可以这样做:

extension="${file##*.}"                     # get the extension
filename="${file%.*}"                       # get the filename
mv "$file" "${filename}001.${extension}"    # rename file by moving it

您可以在Extract filename and extension in bash的优秀答案中看到有关这些命令的更多信息。

测试

$ ls hello.*
hello.doc  hello.txt

让我们重命名这些文件:

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

... Tachan

$ ls hello*
hello001.doc  hello001.txt

答案 1 :(得分:3)

sed 's/\.[^.]*$/.001&/'

你可以用上面的单行建立你的mv cmd。

示例:

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

答案 2 :(得分:0)

如果你的文件扩展名是变量EXT,而你的文件是变量FILE,那么这样的东西应该可以用

EXT=ext;FILE=file.ext;echo ${FILE/%$EXT/001.$EXT}

打印

file.001.ext

替换被锚定到字符串的末尾,因此如果您的扩展名出现在文件名中,则无关紧要。更多信息http://tldp.org/LDP/abs/html/string-manipulation.html