如何使用正则表达式在 Linux 中将字符附加到文件名?我看过这两篇帖子
- https://stackoverflow.com/questions/6985873/change-names-of-multiple-files-linux
- 如何通过替换文件名中的单词来重命名多个文件?
但一直没能得到对我有用的答案。我也不确定这是否属于这里、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
答案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 {} \;