ファイル名を小文字に一括変更


17

ディレクトリ内のすべてのファイルの名前を小文字|大文字に変更する方法はありますか?

ワンライナーコマンドを探しています。

TotalCommanderが大好きだったのでalt+f7、ターミナルでその機能が必要になりました

回答:


20

a_file現在のディレクトリ内の各ファイルの名前a_fileを小文字に変更します。

for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;

大文字の場合、引数を逆に [:lower:] [:upper:]

trコマンドリファレンスリンク

更新

さらに制御*をに置き換えることができますls

たとえば、*。jpgファイルのみをフィルタリングするために、1.txt、2.txt、3.txt、1.jpg、2.jpg、3.jpgを含むディレクトリlsで使用できます。

for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;

上記のコードは、a_file拡張子が.jpgのすべてのファイルを変数に割り当てます。

推奨されるsdsに従ってコマンドに追加された-vオプションを更新します。mv


4
「-v」を渡してmv、何が行われているかを確認できます。「-f」を渡したくない場合があります。これは既存のファイルを上書きする可能性があるためです
-sds

これは、名前にスペースが含まれるファイルでは機能しません。
天翔X

ファイル名を引用符で囲むことができます。
Stef K

2
申し訳ありませんが、ls * jpgに関する部分は悪い考えです。 mywiki.wooledge.org/ParsingLsそもそも *があった場所に沿って* jpgで同じ結果を得ることができます。
ティンク

16

と呼ばれる、よりエレガントで一般的なユーティリティがありますprename

Larry Wallによって書かれてperlおり、システム上ですでに利用可能になっている可能性が高い/usr/bin/prename(セットアップの代替がある場合は/usr/bin/rename、/ etc / alternativesを介してsymlink としても利用可能ですprename

それを使用して、perl式(置換s///またはchar音訳を含むがこれらに限定されない)を提供することにより、1つのコマンドで複数のファイルの名前を変更できますtr///

例:

# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG

# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*

# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*

# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}'  *

等々。

prenameのもう1つの良い点は、ファイルの名前を既存のファイル名に変更する場合に保護されることです。

man prename 詳細については。


1

を使用して find

find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;

にとって find

  • もちろん-nameパターンを入れた後。
  • -maxdepth 0:現在のディレクトリのみ。

にとって rename

  • -n, -nono:アクションなし:名前を変更するファイルの名前を出力しますが、名前は変更しません。
  • y/source/dest/:ソースに表示されるパターンスペースの文字を、destの対応する文字に音訳します。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.