我想将目录中的文件重命名为序号。基于文件的创建日期。
例如sadf.jpg
to 0001.jpg
,wrjr3.jpg
to0002.jpg
等等,前导零的数量取决于文件的总数(如果不需要,则不需要额外的零)。
尝试使用循环let
和printf
进行填充:
a=1
for i in *.jpg; do
new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
mv -i -- "$i" "$new"
let a=a+1
done
使用该-i
标志可防止自动覆盖现有文件。
您也
printf -v new "%04d.jpg" ${a}
可以将值放入变量中。并((a++))
增加变量。另外,这不会按照创建日期的顺序进行操作,也不会最小化OP指定的填充空间。但是,应该注意,Linux / Unix不存储创建日期。需要使用双引号将mv换行,以便在我的bash环境中工作。mv“ $ {i}”“ $ {new}”
可能只是Cygwin(尽管它的终端行为与普通的Unix shell大致相同),但是当文件名中有空格时,似乎出现了问题。
可能还需要使用
mv -- "$i" "$new"
正确处理以破折号开头的源文件名。mv
照原样,将尝试解析此类文件名作为标志的集合。我一眼就丢失了约800个文件。我认为
-i
应该将其包含在答案中,并相应地重写注释。这样会更安全。:(