私のLinuxシステムには、他のコンピュータ(一部はWindowsコンピュータ)とクロス同期するフォルダがあります。問題は、フォルダに「重複した大文字と小文字」のファイルがあることです。つまり、1つ以上の文字が大文字と小文字であることを除いて、ファイル名は同じです。これはLinuxシステムでは問題ではありませんが、Windowsシステムでは問題になり、ファイル名が重複するという問題が発生します。
「そのうちの1つに「1」が追加された同じ名前の2つのファイルが作成されている場合は、すべてのファイル名を小文字に変換する」など、これらのファイル名を見つけて置き換える簡単なコマンドライン方法はありますか?
答え1
ホイールを再発明したくない場合は、mv
コマンドの組み込み機能を使用して自動番号付きバックアップを実行できます。シェルが基本的に大文字と小文字の変換をサポートしている場合は、おそらく簡単です。
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