現在のディレクトリのすべてのファイル名からある文字を別の文字に置き換える方法は?

現在のディレクトリのすべてのファイル名からある文字を別の文字に置き換える方法は?

現在のフォルダのすべてのファイル/サブディレクトリの名前を変更するには?

スペースがあるファイルとサブディレクトリが多く、すべてのスペースを下線に変更したいとします。

File 1
File 2
File 3
Dir 1
Dir 3

に名前を変更する必要があります

File_1
File_2
File_3
Dir_1
Dir_3

ベストアンサー1

すべてのシェルで、名前にスペースを含むファイルを繰り返すことができます。 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// /_}'

または:

autoload zmv
zmv '*' '${f// /_}'

必須POSIXソリューション:

for x in *" "*; do
  y=$(printf %s/ "$x" | tr " " "_")
  mv -- "$x" "${y%/}"
done

おすすめ記事