web-dev-qa-db-ja.com

すべてのファイルの名前を小文字に変更するにはどうすればよいですか?

たとえば、TREE.wav、ONE.WAVがあります。名前をtree.wav、one.wavに変更します。すべてのファイルの名前を小文字に変更するにはどうすればよいですか?

107
Voloda2

ターミナルに慣れている場合:

  1. Terminal.appを開き、cdと入力し、名前を変更するファイルを含むフォルダーをウィンドウにドラッグアンドドロップします。
  2. 正しいディレクトリにいることを確認するには、lsと入力してEnterキーを押します。
  3. このコードを貼り付けて、Enterキーを押します。

    for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
    
  4. すべてのファイルが小文字であることを確認するには、lsと入力し、もう一度Enterキーを押します。

(いくつかの修正を行ったTwitterの@bavariousに感謝します。また、大文字と小文字を区別しないファイルシステムでこれをより安全にしてくれたJohn Whitleyに感謝します。)

334
wjl

質問は一般的であり、重要でもあるため、より一般的な回答を提供したいと思います。

最も単純なケース(ほとんどの場合、Mac OS Xでは安全ですが、読み進めてください):

for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done

ファイル名のスペースも処理する必要があります(すべてのOS):

IFS=$'\n' ; for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; mv "$i" "$j" ; done

大文字と小文字を区別するファイルシステムでは大文字と小文字のみが異なり、ターゲットを上書きしないファイル名を安全に処理する必要があります(Linuxなど):

for i in * ; do j=$(tr '[:upper:]' '[:lower:]' <<< "$i") ; [ -e "$j" ] && continue ; mv "$i" "$j" ; done 

Mac OS Xに関する注意:

Macのファイルシステムは大文字と小文字を区別せず、大文字と小文字を保持します。

ただし、大文字と小文字のみが異なる2つのファイル名が最初に存在することはできないため、受け入れられた回答とコメントで示唆されているように、一時ファイルを作成する必要はありません ref

これを表示するには:

$ mkdir test
$ cd test
$ touch X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 X
$ mv X x
$ ls -l 
total 0
-rw-r--r--  1 alexharvey  wheel  0 26 Sep 20:20 x
4
Alex Harvey