正则expression式replace追加文件名

如何使用正则expression式将字符附加到Linux中的文件名? 我见过这两个职位

  1. https://stackoverflow.com/questions/6985873/change-names-of-multiple-files-linux
  2. 如何通过replace文件名中的单词来重命名多个文件?

但一直没能得到答案为我工作。 我也不确定是否属于这里,堆栈溢出或在其他子站点。

我一直在尝试

for FILE in \d+_\d+\.png; do echo "$FILE" $(echo "$FILE" | sed 's/\./_t\./'); done 

但似乎并不认可正则expression式的正则expression式。

所以对于我的文件目前的数据样本

1111_2222.png

我希望他们成为

1111_2222_t.png

这些文件分散在五个目录中。 谢谢。

 [vagrant@vm-one ~]$ ls 1111_2222.png 1111_4444.png 1111_6666.png [vagrant@vm-one ~]$ for f in `ls | egrep '[0-9]+_[0-9]+\.png'`; do mv "$f" "${f/.png/_t.png}"; done [vagrant@vm-one ~]$ ls 1111_2222_t.png 1111_4444_t.png 1111_6666_t.png 

来源

  1. ls | egrep ls | egrep片段已经从这里检索

  2. 基于这个答案的mv $f ${f/.png/_t.png}

这在我的testing中适用于我

 shopt -s globstar; for i in **; do test -f ${i} || continue; ext=${i##*.}; echo mv $i ${i%%.${ext}}_t.${ext}; done; shopt -u globstar; 

它期望你在正确的基本目录。 请注意,它并不假定文件的扩展名是什么或文件名格式的“开始”是什么。 小心。

简单(也许太多),但也适用于这种情况:

 find . -regextype posix-extended \ -regex '.*[[:digit:]]{4}_[[:digit:]]{4}\.png' \ -type f -exec rename .png _t.png {} \;