在字符串中填充编号并重命名文件

在字符串中填充编号并重命名文件

我有一些这样的文件名。

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 脚本执行。

我确信有一种方法可以作为一句台词来做到这一点,但我感觉很懒。

相关内容