web-dev-qa-db-ja.com

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

ディレクトリ内のall filesを小文字|大文字に変更する方法はありますか?

onelinerコマンドを探しています。

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

17

現在のディレクトリの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 推奨。

20
Stef K

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詳細については。

16
arielf

findを使用

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

findの場合

  • もちろん、-nameの後にパターンを配置します。
  • -maxdepth 0:現在のディレクトリのみ。

renameの場合

  • -n, -nono:アクションなし:名前を変更するファイルの名前を出力しますが、名前は変更しません。
  • y/source/dest/:ソースに現れるパターンスペースの文字を、destの対応する文字に音訳します。
1
Pablo Bianchi