mvがすべてのファイルを見つけて移動しないのはなぜですか?

mvがすべてのファイルを見つけて移動しないのはなぜですか?

現在の作業ディレクトリには、1から100までの番号が付けられた複数のテストファイルがあります。このファイルのタイトルは1.txtToです100.txt

このコマンドは、find . -maxdepth 1 -regextype posix-egrep -regex '.*/[ -._&a-zA-Z0-9]+\.txt' -exec bash -c 'mv "$@" "TestDir - Level One"' {} +1つを除くすべてのファイルを移動します15.txt

代わりに、このコマンドはfind . -maxdepth 1 -regextype posix-egrep -regex '.*/[ -._&a-zA-Z0-9]+\.txt' -exec mv {} "TestDir - Level One"/ \;すべてのファイルを移動します。

コマンドを再実行するとfind . -maxdepth 1 -regextype posix-egrep -regex '.*/[ -._&a-zA-Z0-9]+\.txt' -exec bash -c 'mv "$@" "TestDir - Level One"' {} +エラーが返されます。mv: missing destination file operand after 'TestDir - Level One' Try 'mv --help' for more information.

バージョンfindfind (GNU findutils) 4.7.0-git

答え1

$0呼び出しに対する文字列の割り当てがありませんbash -c '…'。呼び出しの最初の引数は代わりに(シェル名)findに割り当てられているため移動されません。$0$1

-c     このオプションがある場合は、-cオプションではなく最初の引数 command_string からコマンドを読み込みます。 command_stringの後にパラメータがある場合最初の引数は位置引数に割り当てられ、$0残りの引数は位置引数に割り当てられます。割り当ては、$0警告およびエラーメッセージに使用されるシェルの名前を設定します。

(強調は私のもの)

コマンドを次に変更します。

find . [more find options…] -exec bash -c 'mv "$@" "TestDir - Level One"' bash {} +

関連情報