find -execを使用して、xargsのように複数のファイルをすべて1行でcpする方法を見つけましたが、正確にどのように機能するかわかりません。

m0meni

私は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.

誰かが何が起こっているのか、あるいはこれが実行可能であるかどうかを解明できますか?

John1024

何が起こっているのかを理解するには、これを見てください:

$ 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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ