私はfind-execとfind |を使用して作業してきました。過去数時間のxargsの調査と実験で、他では見たことのないコマンドのバリエーションを見つけました。
たとえば、このfindコマンドは、子サブディレクトリ内のすべてのファイルを取得し、それらを現在のディレクトリにコピーします。
find . -type f -regex './[^\.].*/[^.*].*' -exec sh -c 'cp "$@" .' thiscanbeanything {} +
次のようにすべてが1行で実行されます。
cp ./testy/bar ./testy/baz ./testy/foo .
通常の代わりに:
find . -type f -regex './[^\.].*/[^.*].*' -exec sh -c 'cp {} .' \;
複数の行で実行されます
cp ./testy/bar .
cp ./testy/baz .
cp ./testy/foo .
さらに、最初のコマンドでは、出力は次のようになります。
cp ./testy/baz ./testy/foo .
のsh -c 'cmd'
後に何か他のものが続かない限り、私の例ではthiscanbeanything.
誰かが何が起こっているのか、あるいはこれが実行可能であるかどうかを解明できますか?
何が起こっているのかを理解するには、これを見てください:
$ sh -c 'echo 0=$0 1=$1 2=$2' thiscanbeanything one two
0=thiscanbeanything 1=one 2=two
これはsh
、オプション-c 'echo 0=$0 1=$1 2=$2'
と3つの引数を使用して実行されますthiscanbeanything one two
。
通常$0
は、実行されているスクリプトの名前です。を実行する場合sh -c
、スクリプトはありませんが、名前は、提供する最初の引数(この場合はthiscanbeanything
。)から取得されます。
この動作はman bash
、次の-c
オプションで文書化されています。
-c string
-cオプションが存在する場合、コマンドはstringから読み取られます。文字列の後に引数がある場合、それらは$ 0から始まる位置パラメーターに割り当てられます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加