現在のフォルダー内のすべてのファイル/サブディレクトリの名前をどのように変更しますか?
たとえば、スペースを含むファイルやサブディレクトリがたくさんあり、すべてのスペースをアンダースコアに置き換えたいとしましょう。
File 1
File 2
File 3
Dir 1
Dir 3
名前を変更する必要があります
File_1
File_2
File_3
Dir_1
Dir_3
サブディレクトリ内のファイルの名前も変更する必要があり、find
が-execdir
述語をサポートしている場合、次のことができます
find /search/path -depth -name '* *' \
-execdir bash -c 'mv -- "$1" "${1// /_}"' bash {} \;
find
の-depth
オプションを提案して、考えさせてくれた@glenn jackmanに感謝します。
一部のシステム(GNU/Linuxを含む)では、find
は名前にスペースが含まれているファイルや、有効な文字を形成しないバイトのシーケンス(通常は、ロケールとは異なる文字セットでエンコードされたASCII文字)。ロケールをC
に設定すると(LC_ALL=C find...
のように)、問題が解決します。
どのシェルでも、名前にスペースが含まれているファイルをループできます。スペースをアンダースコアで置き換えるのは、bash、ksh、zshでは${VARIABLE//PATTERN/REPLACEMENT}
構成。
for x in *" "*; do
mv -- "$x" "${x// /_}"
done
Debian、Ubuntu、および派生物では、Perl rename
を使用できます(他のディストリビューションはrename
として別のプログラムを出荷しており、そのプログラムはここでは役に立ちません)。
rename 's/ /_/g' *
必須のzshソリューション:
autoload zmv
zmv '(*)' '${1// /_}'
必須のPOSIXソリューション:
for x in *" "*; do
y=$(printf %sa "$x" | tr " " "_")
mv -- "$x" "${y%a}"
done
これにはrename
を使用できます(ここではPerl
ではなくutil-linux
からのものを想定しています):
cd /path/to/dir
rename ' ' _ *\ *
これにより、名前に含まれるすべてのファイルとディレクトリのスペースが検索され、スペースがアンダースコアに置き換えられます。 globファイルマッチングを使用するため、最初は正しいディレクトリにいる必要があります。
再帰的に一致させたい場合は可能ですが、rename
を数回実行して、名前が変更されたディレクトリ内のアイテムをキャッチする必要がある場合があります。
cd /path/to/dir
shopt -s globstar
rename ' ' _ **/*\ *
!!; !!
別のオプションは、インストールされている場合、mmv
です。
mmv \*\ \* \#1_#2
Debian/Ubuntuでは、CalebとGillesの回答に基づいて、ファイル名を再帰的に変更するためにこれが機能しました。
cd /path/to/dir
shopt -s globstar
rename 's/ /_/g' **
注:名前が変更されるファイルとその方法をプレビューするには、rename
で-n
スイッチを使用します。
rename -n 's/ /_/g' **
もう1つの注意:globstar
を設定すると、すべてのサブディレクトリで**
一致ファイルが作成されるため、現在のディレクトリのみが必要な場合は、globstarを設定しないか、*
の代わりに**
を使用しないでください。
もう1つ注意点:rename
コマンドは、検索語が複数出現するファイルに対して複数回実行する必要があります。
正規表現のフラッシュではなく(私は違います!)、kde用に設計されたアプリケーションを実行できる場合(kde-kデスクトップを使用するか、ライブラリがインストールされている場合)、krenameは優れたグラフィカルユーティリティです。変更にコミットする前と後beforeを確認できます。オプションとして多数の単純な変換があり、正規表現もサポートしています。複数の順次変換を1つの名前変更に組み合わせることもできるため、一度にすべてを行う単一の複雑な変換を設計する必要はありません。また、名前の変更が適用された後も同じファイルの名前を変更し続けるオプションがあります。
私はそれを頻繁に使用しませんが、使用すると、本当に迅速かつ簡単に仕事が完了します。ダウンロードしたさまざまなメディアファイルの名前を変更するときに非常に便利なので、システム上でそれらを一元的に管理できます。プログラムを使用しているときに参照できるように、krenameマニュアルを個別にダウンロードするのに役立ちます。