現在の作業ディレクトリには、1から100までの番号が付けられた複数のテストファイルがあります。このファイルのタイトルは1.txt
Toです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.
バージョンfind
はfind (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 {} +