私のQnapでは、複数のディレクトリのファイル名で「xyz」を「abc」に変更しようとしました。 Unix / Linux初心者として、次のコマンドを試しました。
for f in *xyz*; do mv -i "$f" "${f//xyz/abc}"; done
これはディレクトリのファイルには適していますが、サブディレクトリのファイルには適していません。サブディレクトリのファイルでも機能するように上記の内容をどのように変更できますか?
答え1
コメントで説明したように、OPはbash
QNAPデバイスでシェルを使用しますが、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
。