正则表达式替换附加文件名

正则表达式替换附加文件名

如何使用正则表达式在 Linux 中将字符附加到文件名?我看过这两篇帖子

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

但一直没能得到对我有用的答案。我也不确定这是否属于这里、stack overflow 还是其他子站点。

我一直在尝试

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

但这似乎没有将正则表达式文件名识别为正则表达式。

因此对于数据样本我的文件目前是

1111_2222.png

我希望他们

1111_2222_t.png

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

答案1

[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片段取自这里

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

答案2

这在我的测试中对我有用。

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

它要求您位于正确的基本目录中。请注意,它不会假设文件的扩展名是什么或文件名格式的“开头”是什么。请小心。

答案3

简单(可能太简单了),但在这种情况下也有效:

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

相关内容