我需要在bash脚本中扩展文件之前添加一个数字。例如,我想将文件名称“abc.efg
”转换为“abc.001.efg
。问题是我不知道文件的扩展名是什么(它是参数之一)的剧本)。
我一直在寻找最快捷的方式。
提前致谢,
答案 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