Pro cp je málo používaná volba :-t destination -- viz manuálová stránka:
find . -iname "*.SomeExt" | xargs cp -t Directory
Můžete použít | jako níže:
find . -iname "*.SomeExt" | while read line
do
cp $line DestDir/
done
Odpovědi na vaše otázky:
-
|lze použít k vyřešení tohoto problému. Ale jak je vidět výše, zahrnuje to spoustu kódu. Navíc|vytvoří dva procesy – jeden profinda další procp. -
Místo toho použijte
exec()uvnitřfindvyřeší problém v jediném procesu.
Dobrá otázka!
- proč nemůžete použít | trubka? není to k čemu to je?
Můžete samozřejmě použít kanál xargs se provádí pro tyto případy:
find . -iname "*.SomeExt" | xargs cp Destination_Directory/
- Proč všichni doporučují -exec
-exec je dobré, protože poskytuje větší kontrolu nad tím, co přesně provádíte. Kdykoli dáte pipetu, mohou nastat problémy s rohovými pouzdry:názvy souborů obsahující mezery nebo nové řádky atd.
- Jak poznám, kdy použít tento (exec) přes potrubí | ?
Je to opravdu na vás a případů může být mnoho. Použil bych -exec vždy, když je akce k provedení jednoduchá. Nejsem příliš dobrým přítelem xargs , dávám přednost přístupu, ve kterém find výstup je poskytován na while smyčka, například:
while IFS= read -r result
do
# do things with "$result"
done < <(find ...)