私はそれが尋ねられたことを知っていますが、私が見つけたものは今のところうまくいきません。私が来たクローゼットはこれです:rename -n 'y[A-Z]/[a-z]/' *
これは現在のディレクトリで機能します。私はLinuxターミナルが苦手なので、このコマンドに何を追加して、所属するすべてのサブディレクトリ内のすべてのファイルに適用する必要があります。ありがとうございます。
find
とtr
を使用する1つの方法は次のとおりです。
for i in $(find . -type f -name "*[A-Z]*"); do mv "$i" "$(echo $i | tr A-Z a-z)"; done
編集;追加:-name "*[A-Z]*"
これにより、大文字のファイルのみが確実に検出されます。たとえば、小文字のみのファイルが見つかって同じファイルに移動した場合、mv
はare the same file
エラーを表示します。
Perlには、ロケール対応のlc()
関数があります。
find . -type f | Perl -n -e 'chomp; system("mv", $_, lc($_))'
このスクリプトはファイル名の空白を処理しますが、改行は処理しないことに注意してください。また、「ASDF.txt」と「asdf.txt」がある場合、衝突に対する保護はありません。