Files

批量重命名“案例重複”

  • November 7, 2019

我的 Linux 系統上有一個與其他電腦交叉同步的文件夾,其中一些與 Windows 交叉同步。問題是在那個文件夾中有“大小寫重複”的文件,即它們的文件名是相同的,除了一個或多個字元是大寫還是小寫。對於 Linux 系統,這不是問題,但對於 Windows 系統,它會抱怨文件名重複。

是否有一種簡單的命令行方法來查找和替換此類文件名,例如“將所有文件名轉換為小寫,如果這導致兩個具有相同名稱的文件將'1’附加到其中一個”?

如果您想避免重新發明輪子,您可以使用該mv命令的內置功能進行自動編號備份;如果你的 shell 本身支持大小寫轉換,那麼簡單

for f in *; do mv --backup=numbered -- "$f" "${f,,}"; done

預設的備份號碼格式是.~1~,例如給定的

SOME FILE  sOmE fIlE  some file

然後

$ for f in *; do mv -v --backup=numbered -- "$f" "${f,,}"; done
‘SOME FILE’ -> ‘some file’ (backup: ‘some file.~1~’)
‘sOmE fIlE’ -> ‘some file’ (backup: ‘some file.~2~’)
mv: ‘some file’ and ‘some file’ are the same file

如果您不喜歡預設編號,您可以隨時更改它;如果您的系統包含基於 perl 的rename命令,可能類似於

$ rename -v -- 's/\.~(\d+)~/$1/' *.~*~
some file.~1~ renamed as some file1
some file.~2~ renamed as some file2

終於給

$ ls
some file  some file1  some file2

引用自:https://unix.stackexchange.com/questions/187985