たとえば、TREE.wav、ONE.WAVがあります。名前をtree.wav、one.wavに変更します。すべてのファイルの名前を小文字に変更するにはどうすればよいですか?
ターミナルに慣れている場合:
cd
と入力し、名前を変更するファイルを含むフォルダーをウィンドウにドラッグアンドドロップします。ls
と入力してEnterキーを押します。このコードを貼り付けて、Enterキーを押します。
for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
ls
と入力し、もう一度Enterキーを押します。(いくつかの修正を行ったTwitterの@bavariousに感謝します。また、大文字と小文字を区別しないファイルシステムでこれをより安全にしてくれたJohn Whitleyに感謝します。)
質問は一般的であり、重要でもあるため、より一般的な回答を提供したいと思います。
最も単純なケース(ほとんどの場合、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