我想将目录中的文件重命名为顺序数字。根据文件的创建日期。
例如,sadf.jpg到0001.jpg, wrjr3.jpg到0002.jpg等等,前导零的数量取决于文件的总数(如果不需要,不需要额外的零)。
我想将目录中的文件重命名为顺序数字。根据文件的创建日期。
例如,sadf.jpg到0001.jpg, wrjr3.jpg到0002.jpg等等,前导零的数量取决于文件的总数(如果不需要,不需要额外的零)。
当前回答
对我来说,这些答案的组合非常完美:
ls -v | gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | bash
ls -v帮助以正确的1 10 9:1 9 10的顺序排序,避免文件名扩展的问题jpg jpg jpeg gawk 'BEGIN{a=1}{printf "mv %s %04d.jpg\n", $0, a++}'以4个字符和前导零重新编号。通过避免mv,我不会意外地试图覆盖已经存在的任何东西,因为意外地有相同的数字。 bash执行
注意@xhienne所说的,将未知内容输送到bash是一种安全风险。但这不是我的情况,因为我使用我的扫描照片。
其他回答
Pero的回答把我带到了这里:)
我想相对于时间重命名文件,因为图像查看器没有按时间顺序显示图像。
ls -tr *.jpg | # list jpegs relative to time
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command
下面是另一个使用"rename"命令的解决方案:
find -name 'access.log.*.gz' | sort -Vr | rename 's/(\d+)/$1+1/ge'
一个非常简单的bash一行代码,它保留了原来的扩展名,增加了前导零,并且也适用于OSX:
num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done
简化版http://ubuntuforums.org/showthread.php?t=1355021
a=1
for i in *.jpg; do
mv -- "$i" "$a.jpg"
a=`expr $a + 1`
done
我花了3-4个小时来开发这个解决方案: https://www.cloudsavvyit.com/8254/how-to-bulk-rename-files-to-numeric-file-names-in-linux/
if [ ! -r _e -a ! -r _c ]; then echo 'pdf' > _e; echo 1 > _c ;find . -name "*.$(cat _e)" -print0 | xargs -0 -t -I{} bash -c 'mv -n "{}" $(cat _c).$(cat _e);echo $[ $(cat _c) + 1 ] > _c'; rm -f _e _c; fi
这适用于任何类型的文件名(空格,特殊字符),通过find和xargs使用正确的\0转义,如果你喜欢,你可以通过将echo 1增加到任何其他数字来设置开始文件命名偏移量。
在开始时设置扩展名(此处以pdf为例)。它也不会覆盖任何现有文件。