Was Sie geschrieben sendet eine Liste von Newline Dateinamen getrennt (und Pfade) zu rm
, aber rm weiß nicht, was mit diesem Eingang zu tun ist. Es erwartet nur Kommandozeilenparameter.
xargs
nimmt die Eingabe, in der Regel durch Zeilenumbrüche getrennt sind, und legt sie auf der Kommandozeile, macht so das Hinzufügen xargs, was Sie zur Arbeit hatte:
find . -name .svn | xargs rm -fr
xargs
intelligent genug, dass es nur so viele Argumente übergeben werden rm
wie es akzeptieren kann. Wenn Sie also eine Million Dateien haben, könnte es rm
1.000.000/65.000 Mal ausgeführt werden (wenn Ihre Shell 65.002 Argumente in der Befehlszeile akzeptieren könnte {65k Dateien + 1 für RM + 1 für -fr}).
Als Personen adeptly haben darauf hingewiesen, folgendes auch arbeiten:
find . -name .svn -exec rm -rf {} \;
find . -depth -name .svn -exec rm -fr {} \;
find . -type d -name .svn -print0|xargs -0 rm -rf
Die ersten beiden -exec
Formen rufen beide rm
für jeden Ordner gelöscht werden, wenn Sie also 1.000.000 Ordner hätten, würden rm
1.000.000 mal aufgerufen .Dies ist sicherlich nicht ideal. Neuere Implementierungen von rm
können Sie den Befehl zu dem Schluss, mit einem +
darauf hinweist, dass rm
so viele Argumente wie möglich annehmen:
find . -name .svn -exec rm -rf {} +
Der letzte Fund/xargs Version verwendet print0, die finden Ausgabe erzeugen macht die \0
als verwendet Terminator statt einer Newline. Da POSIX-Systeme jedes Zeichen außer \0
im Dateinamen zulassen, ist dies der sicherste Weg, um sicherzustellen, dass die Argumente korrekt an rm
übergeben werden oder die Anwendung ausgeführt wird.
Darüber hinaus gibt es ein -execdir
die rm
aus dem Verzeichnis ausgeführt wird, in dem die Datei gefunden wurde, anstatt auf dem Basisverzeichnis und ein -depth
die Tiefe zuerst beginnen.
Ihr Befehl sollte funktionieren, wenn Sie ‚xargs rm -rf‘ verwenden –
Sie auch den Löschbefehl „rm wollen könnte ändern -rfi "nur um sicherzustellen, dass Sie positiv sind, möchten Sie die Verzeichnisse löschen. – bedwyr
Verwenden Sie nicht xargs though .. Sie werden Probleme mit Verzeichnissen haben, die Leerzeichen in ihnen haben usw. Verwenden Sie find wie unten beschrieben. –