すべてのフォルダとファイルの名前の文字列を別の文字列に再帰的に置き換えるにはどうすればよいですか?私はRed Hat 6を実行していますが、次の方法で見つけることができます。
find . -name \*string\*
私はなんとかファイル内の文字列に対してそれを行うことができました:
find . -type f -exec sed -i 's/string1/string2/g' {} +
しかし、どうすればすべてのファイル名を同じように置き換えることができますか?
find
およびrename
の使用:
find . -type f -exec rename 's/string1/string2/g' {} +
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
zsh
のzmv
の方が簡単です:
autoload zmv # best in ~/.zshrc
zmv '(**/)(*string1*)' '$1${2//string1/string2}'
への変更
zmv '(**/)(*string1*)(#qD)' '$1${2//string1/string2}'
隠しファイルまたは隠しディレクトリ内のファイルの名前も変更する場合。