Wie führe ich mehrere Befehle nach xargs -0 aus?
find . -name "filename including space" -print0 | xargs -0 ls -aldF > log.txt
find . -name "filename including space" -print0 | xargs -0 rm -rdf
Ist es möglich, kombinieren Sie diese beiden Befehle in eine so, dass nur 1 finden, werden getan, anstatt 2?
Weiß ich xargs -I möglicherweise gibt es Möglichkeiten, es zu tun, die möglicherweise zu Fehlern führen, wenn Sie fortfahren Dateinamen mit Leerzeichen. Jede Beratung wird sehr geschätzt.
InformationsquelleAutor der Frage Richard Chen | 2011-09-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie nur wollen, um zu vermeiden, tun die
find
mehrere Male konnten Sie einetee
direkt nach derfind
speichern derfind
Ausgabe in eine Datei, dann ausführen den Zeilen, wie:Einem anderen Weg zu erreichen diese gleiche Sache (wenn in der Tat es ist, was Sie wollen, sind zu erfüllen), ist das speichern der Ausgabe des
find
in eine variable (angenommen es ist nicht TB Daten):InformationsquelleAutor der Antwort Jonathan M
InformationsquelleAutor der Antwort glenn jackman
Ich glaube all diese Antworten jetzt gegeben haben, sich die richtigen Wege sind, muß dieses problem. Und ich habe versucht, die 2 Lösungen von Jonathan und den Weg von Glenn, die alle sehr gut funktioniert auf meinem Mac OS X. Die Methode der mouviciel hat nicht funktioniert, mein OS vielleicht aufgrund einiger Konfigurations-Gründen. Und ich denke, es ist ähnlich wie Jonathan die zweite Methode (ich kann falsch sein).
Wie bereits in den Kommentaren zu Glenn ' s Methode, ein wenig zwicken, ist erforderlich. So, hier ist der Befehl, den ich versuchte, die perfekt funktioniert FYI:
Oder besser wie vorgeschlagen von Glenn:
InformationsquelleAutor der Antwort Richard Chen
Solange Sie nicht newline in Ihren Dateinamen, die Sie nicht brauchen-print0 für GNU Parallel:
Sehen Sie das intro-video um mehr zu erfahren: http://www.youtube.com/watch?v=OpaiGYxkSuQ
InformationsquelleAutor der Antwort Ole Tange
Nur eine variation des
xargs
Ansatz, ohne dass schrecklich-print0
undxargs -0
das ist, wie ich es tun würde:Fußnoten:
xargs
aber für den Leser zu verstehen, ich habe auch lange.ls -1
wenn ich möchte, dass nicht-rekursive Verhalten eher alsfind -maxdepth 1 -iname "*.txt"
die ein bisschen Ausführlicher ist.InformationsquelleAutor der Antwort Sridhar-Sarnobat
Führen Sie mehrere Befehle nach
find
mitfor
stattxargs
:Den
IFS
definiert die Interne Feld-Separator, die standardmäßig auf <space><tab><newline>. Wenn deine Dateinamen Leerzeichen enthalten kann, ist es besser, neu zu definieren, ist es wie oben.InformationsquelleAutor der Antwort ericbn
Ich bin spät zur party, aber es gibt noch eine Lösung, die nicht hier behandelt werden: Benutzer-definierte Funktionen. Setzen mehrere Anweisungen auf einer Zeile ist unhandlich, und kann schwer zu Lesen sein/pflegen. Die for-Schleife oben vermeidet, aber es gibt auch die Möglichkeit, über die Befehlszeile Länge.
Hier ist eine weitere Möglichkeit (ungetestet).
Dies ist ziemlich geradlinig, außer für die "dummyArg", die mir viel Kummer. Beim ausführen von bash auf diese Weise die Argumente sind, Lesen Sie in
statt der erwarteten
Seit processFiles{} erwartet wird das erste argument sein "$1" wir legen einen dummy-Wert in "$0".
Footnontes:
Abgesehen von stilistischen Fragen, es bricht, wenn die "finden" Befehl gibt nichts zurück. In diesem Fall $0 festgelegt ist "bash", Mit dem dummy-argument anstelle vermeidet dies alles.
InformationsquelleAutor der Antwort Phil Freed
Andere Lösung:
InformationsquelleAutor der Antwort mouviciel