我有一堆像这样的编号文件:
file #01.ext
file #02.ext
file #03.ext
file #04.ext
file #05.ext
我想要的是让它们都具有三位数(两个前导 0)而不是一位数字,所以;
file #001.ext
file #002.ext
file #003.ext
file #004.ext
file #005.ext
我的想法是使用 sed 将 # 替换为 #0(在我的情况下这已经足够了,目前还没有超过 #99 的文件)。所有文件都在同一个文件夹中,我该怎么做?
答案1
要保护已经 3 位数字的文件
for f in "file #"*.ext; do
num=${f#file #}
num=${num%.ext}
new=$(printf "file #%03d.ext" $num)
echo mv "$f" "$new"
done
这将在控制台中显示要执行的命令,但实际上并不重命名文件。
一旦您对它要做的事情感到满意,您可以通过删除单词echo
并重新运行它来重命名文件。
答案2
你不需要 sed 来实现这一点。只需一个非常简单的命令即可完成:
rename 's/#0/#00/' *.ext
例子:
temp$ ls
file #01.ext file #02.ext file #03.ext file #04.ext file #05.ext
temp$ rename 's/#0/#00/' *.ext
temp$ ls
file #001.ext file #002.ext file #003.ext file #004.ext file #005.ext
答案3
这可以在文件夹内完成:
ls | sed 's/\(.*\)#\(.*\)/mv "&" "\1#0\2"/' | sh
答案4
这是一个混合解决方案:
ls | sed -r "s/(.*#)([0-9]+)([^0-9]*)/printf 'mv -v \"&\" \"%s%03d%s\"' \"\1\" \"\2\" \"\3\"/e;e"