cp
にはあまり使われないオプションがあります :-t destination
-- man ページを参照してください:
find . -iname "*.SomeExt" | xargs cp -t Directory
|
を使用できます 以下のように:
find . -iname "*.SomeExt" | while read line
do
cp $line DestDir/
done
質問への回答:
-
|
この問題を解決するために使用できます。しかし、上で見たように、それには多くのコードが含まれます。しかも|
find
用の 2 つのプロセスを作成します。 もう 1 つはcp
用です . -
代わりに
exec()
を使用しますfind
内 単一のプロセスで問題を解決します。
良い質問です!
<ブロック引用> <オール>
もちろん、xargs
をパイプすることもできます
find . -iname "*.SomeExt" | xargs cp Destination_Directory/
<ブロック引用> - 誰もが -exec を推奨する理由
-exec
実行していることを正確に制御できるため、優れています。パイプを使用するたびに、まれなケースで問題が発生する可能性があります:スペースや改行を含むファイル名など。
- パイプで (exec) を使用するタイミングを知るにはどうすればよいですか | ?
それは本当にあなた次第であり、多くの場合があります。 -exec
を使用します 実行するアクションが単純な場合はいつでも。私は xargs
とはあまり仲が良くありません 、私は find
のアプローチを好む傾向があります 出力は while
に提供されます 次のようなループ:
while IFS= read -r result
do
# do things with "$result"
done < <(find ...)