In Ihrem Beispiel müssen Sie überhaupt nicht verwenden, xargsda findgenau und sicher das getan wird, was Sie tun möchten.
Genau das, was Sie verwenden möchten, findist:
find -maxdepth 1 -name '*Cases*' -exec touch {} +
In diesem Beispiel -maxdepth 1bedeutet 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, findhat eine Reihe von kleinen Ärgernissen wie diese, aber seine Kraft macht das mehr als wett.
Beides findund xargssind zunächst schwierig zu lernen. Damit Sie lernen , xargsversuchen , die Verwendung -poder --interactiveOption , 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 findkönnen Sie -okanstelle von verwenden -exec, um Sie aufzufordern, ob Sie den Befehl ausführen möchten oder nicht.
Es kann jedoch vorkommen, dass Sie findnicht in der Lage sind, alles zu tun, was Sie möchten, und hier xargskommt es an. Der -execBefehl 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 findsicher das macht, was Sie wollen, da Sie beim Umgang mit Dateien auf Leerzeichen und andere Zeichen stoßen, die Probleme verursachen, xargswenn Sie nicht die Option -0oder --nullzusammen mit etwas verwenden, das stattdessen Eingabeelemente erzeugt, die mit einem Null-Zeichen abgeschlossen sind Leerzeichen.
xargsund$(...)) 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?