私の使命は、特別な名前を持つ複数のディレクトリのすべてのファイルをターゲットディレクトリにコピーすることです。
だから私はコマンドをテストするためにこのディレクトリを作成しました。テストディレクトリツリーは次のとおりです。
.
├── dir1
│ └── file1
└── test
mv dir1のすべてのファイルをテストするコマンドは次のとおりです。
find . -type d -name "*dir*" -exec mv {}/* test \;
それから私は次を得ます:
mv: rename ./dir1/* to test/*: No such file or directory
これは、コマンドが追加の-exec式で*をワイルドカード文字として扱わないためだと思います。
だから私はこれをしました:
find . -type d -name "*dir*" -exec mv {}/file1 test \;
テストのためにfile1を正常に移動しました。
ただし、要点は、このファイル転送操作を実行するには、すべてのファイルの式が必要であることです。
find -exec
この事実を指揮グループにどのように伝えますか?
ベストアンサー1
mv "$dir_path"/* ...
"$dir_path"
ファイルだけでなく、名前が少なくとも点で始まらないすべてのファイル(隠しファイル)も移動されます。 Bashでは、optionsを使用してこの設定を変更できますdotglob
。ただし、*
うまく拡張した場合(すべてのものと一致するがコマンドラインと比較してあまり多くない場合)、シェル間接参照を使用できます。
find . -type d -name "*dir*" -exec bash -c 'mv "$0"/* /path/to/test' {} \;