web-dev-qa-db-ja.com

すべてのフォルダとファイル名の文字列を置き換える方法

すべてのフォルダとファイルの名前の文字列を別の文字列に再帰的に置き換えるにはどうすればよいですか?私はRed Hat 6を実行していますが、次の方法で見つけることができます。

find . -name \*string\*

私はなんとかファイル内の文字列に対してそれを行うことができました:

find . -type f -exec sed -i 's/string1/string2/g' {} +

しかし、どうすればすべてのファイル名を同じように置き換えることができますか?

6
Blasco

findおよびrenameの使用:

find . -type f -exec rename 's/string1/string2/g' {} +
6
PesaThe

forおよびmvコマンドを使用して、すべてのファイル名を置き換えることができます。

ここでは、abcの名前で始まるすべてのテキストファイルをxyzに置き換えています。

for file in abc*.txt; do mv -v "$file" "${file/abc/xyz}"; done

以下のコマンドは、すべてのフォルダー内のファイルを再帰的に置き換えます

for file in `find . -type f -name 'abc*.txt'`; do mv -v "$file" "${file/abc/xyz}"; done
5
Ganesh_

zshzmvの方が簡単です:

autoload zmv # best in ~/.zshrc
zmv '(**/)(*string1*)' '$1${2//string1/string2}'

への変更

zmv '(**/)(*string1*)(#qD)' '$1${2//string1/string2}'

隠しファイルまたは隠しディレクトリ内のファイルの名前も変更する場合。

1