Angenommen, ich möchte alle Dateien in einem Ordner löschen, die größer als 1 MB sind.
$ find . -size +1M | xargs -0 rm
Dadurch werden keine Dateien gelöscht, deren Namen Leerzeichen enthalten. Ich möchte, dass es alle Argumente zitiert, an die es sendet rm
. Wenn find
es gibt Some report.docx
sollte es passieren "Some report.docx"
zu rm
.
Wie kann ich das machen?
xargs
. Auch als das Wiki schlägt vor, verwenden Sie nichtxargs
ohne Umweg-print0
zufind
.xargs -d$'\n'
das Trennzeichen , um nur neue Zeilen zu begrenzen (und keine Leerzeichen, dies würde nicht Anführungszeichen usw. verarbeitet speziell - ich auf einem GNU - System überprüft habe) - die Antwort in bestimmten stackoverflow.com/a/33528111/94687Antworten:
Einfache Bedienung:
Wenn Sie darauf bestehen,
xargs
undrm
mit zu verwendenfind
, fügen-print0
Sie einfach Ihren Befehl hinzu:Andere Weise:
Von
man find
:quelle
"Some report.docx"
zurm
, es sei denn , der Dateiname , die Anführungszeichen enthält. Was Sie wollen, istSome report.docx
unbehelligt weiterzugebenrm
. Die Antwort von KasiyA zeigt (jetzt), wie man das generell machtfind
. [KasiyA: Entschuldigung für den falschen Ping früher.]$0
und$1
etc. aufgeteilt zu werdenxargs -0
stattxargs -r0
.Option
-0
vonxargs
bedeutet, dass die Ausgabe von Pipe als nullterminierte Elemente interpretiert wird. In diesem Fall müssen Sie auch eine Eingabe für die Pipe mit erstellenfind ... -print0
.quelle
Ich hatte eine ähnliche Anforderung und benutzte den
-I
Schalter, um einen Platzhalter zu haben, und ich konnte ihn zitieren.quelle