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 profind
a další procp
. -
Místo toho použijte
exec()
uvnitřfind
vyř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 ...)