Es gibt eine wenig genutzte Option für cp :-t destination -- siehe Manpage:
find . -iname "*.SomeExt" | xargs cp -t Directory
Sie können | verwenden wie unten:
find . -iname "*.SomeExt" | while read line
do
cp $line DestDir/
done
Beantwortung Ihrer Fragen:
-
|kann verwendet werden, um dieses Problem zu lösen. Aber wie oben gesehen, beinhaltet es eine Menge Code. Außerdem|erstellt zwei Prozesse - einen fürfindund eine weitere fürcp. -
Verwenden Sie stattdessen
exec()innerhalb vonfindlöst das Problem in einem einzigen Vorgang.
Gute Frage!
- warum kannst du nicht einfach | verwenden Rohr? ist das nicht wofür?
Sie können natürlich xargs pipen wird für diese Fälle durchgeführt:
find . -iname "*.SomeExt" | xargs cp Destination_Directory/
- Warum empfiehlt jeder die -exec
Die -exec ist gut, weil es mehr Kontrolle darüber bietet, was Sie genau ausführen. Beim Pipen kann es zu Problemen mit Groß- und Kleinschreibung kommen:Dateinamen mit Leerzeichen oder Zeilenumbrüchen etc.
- Woher weiß ich, wann ich das (exec) über Pipe | verwenden soll ?
Es liegt wirklich an Ihnen und es kann viele Fälle geben. Ich würde -exec verwenden wann immer die auszuführende Aktion einfach ist. Ich bin kein sehr guter Freund von xargs , bevorzuge ich eher einen Ansatz, bei dem find Die Ausgabe erfolgt an while Schleife, wie zum Beispiel:
while IFS= read -r result
do
# do things with "$result"
done < <(find ...)