【发布时间】:2022-01-28 23:17:28
【问题描述】:
我需要在 bash 脚本中的文件扩展名之前添加一个数字。例如,我想将abc.efg 之类的文件名转换为abc.001.efg。问题是我不知道文件的扩展名是什么(它是脚本的参数之一)。
我一直在寻找最快的方法。
提前致谢,
【问题讨论】:
标签: bash
我需要在 bash 脚本中的文件扩展名之前添加一个数字。例如,我想将abc.efg 之类的文件名转换为abc.001.efg。问题是我不知道文件的扩展名是什么(它是脚本的参数之一)。
我一直在寻找最快的方法。
提前致谢,
【问题讨论】:
标签: bash
你可以这样做:
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
大昌...
$ ls hello*
hello001.doc hello001.txt
【讨论】:
sed 's/\.[^.]*$/.001&/'
您可以使用上述单行代码构建您的mv cmd。
示例:
kent$ echo "abc.bar.blah.hello.foo"|sed 's/\.[^.]*$/.001&/'
abc.bar.blah.hello.001.foo
【讨论】:
如果您的文件扩展名在变量 EXT 中,并且您的文件在变量 FILE 中,那么这样的事情应该可以工作
EXT=ext;FILE=file.ext;echo ${FILE/%$EXT/001.$EXT}
打印出来
file.001.ext
替换被锚定到字符串的末尾,因此您的扩展名是否出现在文件名中并不重要。更多信息在这里http://tldp.org/LDP/abs/html/string-manipulation.html
【讨论】: