ディレクトリ内のall filesを小文字|大文字に変更する方法はありますか?
onelinerコマンドを探しています。
TotalCommanderのalt+f7
が大好きだったので、ターミナルでその機能が必要になりました
現在のディレクトリの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;
上記のコードは、拡張子が.jpgのすべてのファイルをa_file
変数に割り当てます。
Update-v
オプションをmv
コマンドに追加しました sds 推奨。
prename
と呼ばれるよりエレガントで一般的なユーティリティがあります。
Larry Wallによって書かれており、Perl
が付属しているため、/usr/bin/prename
としてシステム上ですでに使用可能になっている可能性があります(セットアップの代替手段がある場合は、/ etcを介して/usr/bin/rename
/prename
の代替案)
それを使用して、Perl式(置換s///
またはchar音訳tr///
を含むがこれらに限定されない)を提供することにより、1つのコマンドで複数のファイルの名前を変更できます。
例:
# 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
詳細については。
find
を使用find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
の場合-name
の後にパターンを配置します。-maxdepth 0
:現在のディレクトリのみ。rename
の場合-n, -nono
:アクションなし:名前を変更するファイルの名前を出力しますが、名前は変更しません。y/source/dest/
:ソースに現れるパターンスペースの文字を、destの対応する文字に音訳します。