如何使用正则expression式将字符附加到Linux中的文件名? 我见过这两个职位
但一直没能得到答案为我工作。 我也不确定是否属于这里,堆栈溢出或在其他子站点。
我一直在尝试
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
来源
ls | egrep ls | egrep片段已经从这里检索
基于这个答案的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 {} \;