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


122

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


1
ターミナル/シェルソリューションに満足していますか?または、C / Objective-Cコードでそれを実現しますか?

ターミナルソリューションは問題ありません。
Voloda2 2011年

3
これは再開すべきだと思います。端末コードもコードである
Danield

1
これは、stackoverflowで有効な質問です。これもコードです。
adev 2017

回答:


370

端末に慣れている場合:

  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に感謝します。)


9
注意してください。foo.txtand という名前のファイルがある場合FOO.TXT、これはそれらの1つを破壊する可能性があります。
Keith Thompson、

1
bashのでは、あなただけ行うことができます:mv "$f" "${f,,}"、またはdeclare -l g=$f; mv "$f" "$g"
グレンはジャックマン

2
私はこれらすべてのコマンドを試しましたが、「mv: 'PPP.txt'と 'ppp.txt'は同じファイルです」と表示され、ファイルの大文字と小文字は区別されません。同じディレクトリにあるからですか?
lorless 2013

1
user2066039:1年以上前のほとんどの回答では考慮されないため、これはMacの最近のものである必要があります。「jpg1」のような中間拡張機能を使用して、タスクを実行しました。つまり、JPG-> jpg1-> jpgです。お役に立てば幸いです。
Joyce

14
OS Xユーザーは、大文字と小文字を区別しないファイルシステムのため、最初に各ファイルの名前を一時的な名前に変更する必要があります。例: for f in *; do mv "$f" "$f.tmp"; mv "$f.tmp" "`echo $f | tr "[:upper:]" "[:lower:]"`"; done
John Whitley

10

尋ねられた質問は一般的であり、重要でもあるので、より一般的な答えを提供したいと思います。

最も単純なケース(ほとんどの場合、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

はい-しかし、あなたの例では、「mv X x」を使用してファイル名を小文字にできることを示唆しています。だから私がコメントしたのはそれだけだった。
cpaludan

mojave 10.14.5:#touch X x#ls -la total 0 -rw-r--r-- 1 root root 0 Jun 24 15:19 X#mv X x mv: 'X'と 'x'は同じファイル
#ls

くだらないフォーマットでごめんなさい。そこでは私に親切ではありませんでした。
cpaludan

1
そして、私の悪い-共有ドライブ(hfsplusフォーマット済み)上のラズベリーのsshにありました-動作しません。しかし、私のMacではローカルに実行されます。
cpaludan

for i in *; do j = $(tr '[:upper:]' '[:lower:]' <<< "$ i"); mv "$ i" "$ j"; カタリーナで働いていました。ありがとう。
シナンエルデム

2

魚の殻バージョン:

for old in *
    set new (echo $old | tr '[A-Z]' '[a-z]')
    mv $old $new
end
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.