In Ihrem Beispiel müssen Sie überhaupt nicht verwenden, xargs
da find
genau und sicher das getan wird, was Sie tun möchten.
Genau das, was Sie verwenden möchten, find
ist:
find -maxdepth 1 -name '*Cases*' -exec touch {} +
In diesem Beispiel -maxdepth 1
bedeutet dies, dass nur im aktuellen Verzeichnis gesucht wird und keine Unterverzeichnisse erstellt werden. Standardmäßig sucht find in allen Unterverzeichnissen (was häufig gewünscht wird), sofern Sie es nicht mit maxdepth einschränken. Das {}
ist der Name der Datei, die an ihrer Stelle ersetzt wird, und das +
ist eine von zwei Befehlsende-Markierungen, die andere ;
. Der Unterschied zwischen ihnen besteht darin, dass ;
der Befehl für jede Datei +
einzeln ausgeführt wird , während der Befehl für alle Dateien gleichzeitig ausgeführt wird. Beachten Sie jedoch, dass Ihre Shell wahrscheinlich versucht, sich ;
selbst zu interpretieren. Sie müssen sie daher entweder mit \;
oder schließen ';'
. Ja, find
hat eine Reihe von kleinen Ärgernissen wie diese, aber seine Kraft macht das mehr als wett.
Beides find
und xargs
sind zunächst schwierig zu lernen. Damit Sie lernen , xargs
versuchen , die Verwendung -p
oder --interactive
Option , die Ihnen den Befehl zeigt es im Begriff ist , auszuführen und fordern SieFormal auf, ob Sie es ausgeführt werden sollen.
In ähnlicher Weise find
können Sie -ok
anstelle von verwenden -exec
, um Sie aufzufordern, ob Sie den Befehl ausführen möchten oder nicht.
Es kann jedoch vorkommen, dass Sie find
nicht in der Lage sind, alles zu tun, was Sie möchten, und hier xargs
kommt es an. Der -exec
Befehl akzeptiert nur eine Instanz des {}
Auftretens. Wenn Sie also einen Fehler erhalten find -type f -exec cp {} {}.bak \;
, können Sie dies stattdessen so tun :find -type f -print0 | xargs -0 -l1 -IX cp X X.bak
Weitere Informationen zu Run Commands finden Sie im GNU Findutils-Handbuch .
Ich erwähnte auch, dass dies find
sicher das macht, was Sie wollen, da Sie beim Umgang mit Dateien auf Leerzeichen und andere Zeichen stoßen, die Probleme verursachen, xargs
wenn Sie nicht die Option -0
oder --null
zusammen mit etwas verwenden, das stattdessen Eingabeelemente erzeugt, die mit einem Null-Zeichen abgeschlossen sind Leerzeichen.
xargs
und$(...)
) ist xargs weitaus sicherer als das Ersetzen von Befehlen. Und ich kann mich nicht erinnern, jemals auf einen legitimen Dateinamen mit einer neuen Zeile gestoßen zu sein. Sind die Probleme mit der Ersetzung von Befehlen und der Erweiterung von Wörtern nicht gleichbedeutend mit Problemen mit der Ersetzung von Befehlen und nicht mit Xargs?