我知道如何使用数字重命名文件夹中的所有文件:
i=1
for f in *.jpg
do
NEW_NAME=$( printf "%05d.jpg" $i )
# echo mv "$f" "$( printf "%05d.jpg" $i )"
mv -n "$f" "$NEW_NAME"
((i++))
done
因此我的所有文件都将重命名,但如果我有0004.jpg
这样的文件,则不会将文件重命名为n + 1。如果名称存在,我尝试添加一个用于增加i
的循环:
i=1
for f in *.jpg
do
NEW_NAME=$( printf "%05d.jpg" $i )
# echo mv "$f" "$( printf "%05d.jpg" $i )"
mv -n "$f" "$NEW_NAME"
MV=$?
while [ $MV -ne 0 ]
do
((i++))
NEW_NAME=$( printf "%05d.jpg" $i )
mv -n "$f" "$NEW_NAME"
MV=$?
done
((i++))
done
但似乎没有用。有什么帮助吗?
答案 0 :(得分:1)
您的问题是即使文件已存在,mv -n
也会返回零。
我很想这样做:
i=1
mkdir .newnames
for f in *.jpg
do
NEW_NAME=$( printf "%05d.jpg" $i )
# echo mv "$f" "$( printf "%05d.jpg" $i )"
mv "$f" ".newnames/$NEW_NAME"
((i++))
done
mv .newnames/* .
rmdir .newnames
基本上,通过将文件移动到临时目录(前导.
(点)阻止for循环尝试重命名),可以消除文件夹冲突的可能性。