22

私はそれが尋ねられたことを知っていますが、私が見つけたものは今のところうまくいきません。私が来たクローゼットはこれです:rename -n 'y[A-Z]/[a-z]/' * これは現在のディレクトリで機能します。私はLinuxターミナルがあまり得意ではないので、このコマンドに何を追加して、私が所属するすべてのサブディレクトリ内のすべてのファイルに適用する必要があります。ありがとうございます。

4

2 に答える 2

34

findandを使用する1つの方法は次のtrとおりです。

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ます。

于 2012-10-24T15:02:22.137 に答える
10

Perlには、より適切に機能する可能性のあるロケール対応lc()関数があります。

find . -type f | perl -n -e 'chomp; system("mv", $_, lc($_))'

このスクリプトはファイル名の空白を処理しますが、改行は処理しないことに注意してください。また、「ASDF.txt」と「asdf.txt」がある場合、衝突に対する保護はありません。

于 2012-10-24T16:10:44.983 に答える