次のように、ディレクトリ内の複数のファイルの名前を再帰的に変更しようとします。
parentdirectory/dir1/foo_1.txt
/dir2/bar_1.txt
/dir3/foo_2.txt
私が使用しているツールはワイルドカードを認識しないので、すべてのインスタンスが正確に一致するように「1.txt」で終わるすべてのファイルからテキストを削除したいと思います。
これらのファイルのリストをSTDOUTとして生成し、どこかにパイプすることができます。
find . -name '*1.txt' -print0 |
...しかし、ファイル名を変更するために存在する正規表現を書く方法がわかりません。また、名前を変更する私の設定に従ってインストールされておらず、追加する権限がありません。
ベストアンサー1
for ループで find ステートメントを使用し、シェル部分文字列置換を使用できます。このような。
for file_name in $(find . -name '*1.txt' -print0); do
#echo mv -v "$file_name" "${file_name/substring_to_be_replaced/the_replacement_substring}"
mv -v "$file_name" "${file_name/substring_to_be_replaced/the_replacement_substring}"
done
substring_to_be_replaced
ただ合計に値を入れてくださいthe_replacement_substring
。部分文字列を置き換える方法の詳細については、こちらをご覧ください。https://stackoverflow.com/questions/13210880/replace-one-substring-for-another-string-in-shell-script。
まず、コメントアウトされたechoステートメントを使用して、部分文字列の置換と検索が正しく機能していることを確認します。すべてが正常であると確信している場合は、echoステートメントをコメントアウトして実際のステートメントmv
を使用してください。無効なパラメータの使用を開始すると、元にmv
戻すことが困難または不可能になる可能性があります。