複数のディレクトリにある複数のファイルの文字を置き換える

複数のディレクトリにある複数のファイルの文字を置き換える

私のQnapでは、複数のディレクトリのファイル名で「xyz」を「abc」に変更しようとしました。 Unix / Linux初心者として、次のコマンドを試しました。

for f in *xyz*; do mv -i "$f" "${f//xyz/abc}"; done

これはディレクトリのファイルには適していますが、サブディレクトリのファイルには適していません。サブディレクトリのファイルでも機能するように上記の内容をどのように変更できますか?

ベストアンサー1

コメントで説明したように、OPはbashQNAPデバイスでシェルを使用しますが、Bash 3なので、Bash 4.0に追加されているため、globstarは使用できません.この場合、find考えられる解決策の1つです。

例:

まず、サンプルディレクトリ構造を作成し、XYZ文書:

$ mkdir -p 1/2/3
$ touch  a_xyz_a 1/2/b_xyz_b 1/2/3/c_xyz_c

find+を実行してくださいmv

$ find . -name "*xyz*" -exec sh -c 'echo mv -i "$1" "${1//xyz/abc}";' sh {} \;
mv -i ./a_xyz_a ./a_abc_a
mv -i ./1/2/3/c_xyz_c ./1/2/3/c_abc_c
mv -i ./1/2/b_xyz_b ./1/2/b_abc_b

echo実際に実行するには削除してくださいmv

おすすめ記事