我有一些这样的文件名。
a2.txt.gz
d12.txt.gz
k5.txt.gz
m4.txt.gz
...
一个字符后跟 1 或 2 个数字,后跟 .txt.gz。我想在数字前添加一个零的数字,如下所示。
a02.txt.gz
d12.txt.gz
k05.txt.gz
m04.txt.gz
...
我尝试过类似的方法,但似乎不起作用。
find . | grep -E "[a-z][0-9]{1}\.+" | sed -er s/\([a-z]\)\([0-9]{1}\)\(.txt.gz\)/\10\2\3/
我的逻辑是首先 grep 个位数文件名,然后分成 3 部分字符、数字和 .txt.gz,然后在数字前添加 0。但我无法让它发挥作用。我不确定重命名部分。
答案1
我会这样做:
for f in [a-z][0-9].txt.gz; do mv $f "${f:0:1}0${f:1}" done
我从其他东西中改编了这个(使用它是awk
因为它需要更多,但由于评论我使它变得更好)。
答案2
这样就可以做到:
find . -name '??.txt.gz' | sed -e 's/..\(.\)\(.*\)/mv \1\2 \10\2/' > /tmp/cmds
sh /tmp/cmds
该find
命令获取需要重命名的文件列表。该sed
命令构建一个命令列表mv
来执行您想要的操作。这些内容被写入文件,然后作为 shell 脚本执行。
我确信有一种方法可以作为一句台词来做到这一点,但我感觉很懒。