一致するようにファイル名を再帰的に変更するにはどうすればよいですか?

一致するようにファイル名を再帰的に変更するにはどうすればよいですか?

次のように、ディレクトリ内の複数のファイルの名前を再帰的に変更しようとします。

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戻すことが困難または不可能になる可能性があります。

おすすめ記事