Files
批量重命名“案例重複”
我的 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