Normalerweise müssten Sie Folgendes ausführen, um Dateien mit Leerzeichen im Dateinamen zu entfernen:
$ rm "file name"
aber wenn ich mehrere Dateien entfernen möchte, zB:
$ find . -name "*.txt" | xargs rm
Dadurch werden keine Dateien mit Leerzeichen gelöscht.
command-line
find
rm
xargs
Ashley
quelle
quelle
find -name "*\ *.txt" | xargs rm
für zwei Wortdateien?Antworten:
Sie können sagen,
find
undxargs
beide verwenden Nullterminatorenoder (einfacher) nutzen Sie die eingebaute
-delete
Aktion vonfind
oder (danke @kos)
Bei beiden sollte die Systemgrenze eingehalten werden
ARG_MAX
, ohne dass dies erforderlich istxargs
.quelle
ARG_MAX
erwähne ich auch, dassfind . -name "*.txt" -exec rm {} \;
dies ein "sicherer Schuss" wäre-print0
muss die letzte Option sein (oder zumindest danach-name "*.txt"
), sonst trifft dies Dateien, die nicht mehr auf*.txt
... beschränkt sindÜbrigens, wenn Sie etwas anderes als find verwendet haben, können Sie tr verwenden, um die Zeilenumbrüche durch Null-Bytes zu ersetzen.
Z.B. Die folgende Zeile löscht die 10 zuletzt geänderten Dateien in einem Verzeichnis, auch wenn sie Leerzeichen im Namen haben.
ls -tp | grep -v / | head -n 10 | tr "\n" "\0" | xargs -0 rm
quelle
Der Befehl xargs verwendet standardmäßig Tabulatoren, Leerzeichen und neue Zeilen als Begrenzer. Mit der Option -d können Sie festlegen, dass nur Zeilenumbrüche ('\ n') verwendet werden sollen:
find . -name "*.txt" | xargs -d '\n' rm
Quellantwort auf SO .
quelle
-0
anstelle von-d
(fürxargs
) erwähnt . Was benutzt Ubuntu? Die akzeptierte Antwort hier verwendet-0
. Was ist korrekt?