簡體   English   中英

如何重命名所有文件且不覆蓋?

[英]How to rename all the files and no overwriting?

我知道如何用數字重命名文件夾中的所有文件:

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

但似乎不起作用。 有什么幫助嗎?

您的問題是即使文件已經存在, 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循環嘗試重命名文件),可以消除文件名沖突的可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM