2009-02-13 7 views
7

Was ist der einfachste/beste Weg, um leere (Null-Byte-) Dateien mit nur nativen Mac OS X-Tools zu finden und zu entfernen?Löschen von leeren (Null-Byte-) Dateien

+0

bitte klären! eine Datei, die leer ist, alle leeren Dateien? Was hast du probiert, wo die Fehler? – hop

+0

Ein Kommentar zu meiner Antwort klärte die Frage; angemessen aktualisieren. –

+0

Danke Charles Duffy. Sorry für mein schlechtes Englisch: p – Bank

Antwort

15

Einfach genug:

find . -type f -size 0 -exec rm -f '{}' + 

Um eine Datei mit xattr Inhalt zu ignorieren (die MacOS find Implementierung vorausgesetzt):

find . -type f -size 0 '!' -xattr -exec rm -f '{}' + 

das gesagt ist, beachten Sie, dass viele xattrs sind nicht besonders nützlich (Zum Beispiel existiert com.apple.quarantine für alle heruntergeladenen Dateien).

+1

-type f guten Anruf – dwc

+0

Ich benutze finden. -size 0 -exec rm {} \; aber hinzufügen -type f sollte besser sein – Bank

+0

Also, in Englisch, "finden Sie alle leeren Dateien im aktuellen Verzeichnis und löschen Sie sie ohne Aufforderung den Benutzer"? – endolith

1
find /path/to/stuff -empty 

Wenn das die Liste der Dateien ist Sie suchen dann den Befehl machen:

find /path/to/stuff -empty -exec rm {} \; 

Vorsicht! Es wird keinen Weg geben, dies rückgängig zu machen!

+0

Besser zu verwenden + als; Wenn Sie einen aktuellen Fund haben - so verhält es sich, wenn es in der Pipeline wäre. –

1

Verwendung:

find . -type f -size 0b -exec rm {} ';' 

mit allen anderen möglichen Variationen zu begrenzen, was gelöscht wird.

8

Sie können die potenziell große Anzahl von Gabeln senken laufen/bin/rm durch: Versionen

find . -type f -size 0 -print0 | xargs -0 /bin/rm -f 

Der obige Befehl ist sehr portabel und läuft auf den meisten Versionen von Unix und nicht nur Linux-Boxen, und auf von Unix seit Jahrzehnten zurück. Für lange Dateilisten können mehrere /bin/rm Befehle ausgeführt werden, um zu verhindern, dass die Liste die Befehlszeilenlänge überschreitet.

Ein ähnlicher Effekt kann mit weniger tippen auf neueres OSes erreicht werden, ein + in find mit der häufigste Verwendung von xargs in einem Stil, noch mich neben /bin/rm zu anderen Aktionen verleiht zu ersetzen. In diesem Fall behandelt find die Aufteilung wirklich langer Dateilisten in separate /bin/rm-Befehle. Die {} wird üblicherweise zitiert, um die Shell daran zu hindern, irgendetwas zu tun; die Zitate sind nicht immer erforderlich, aber die Feinheit der Schale zu zitieren sind zu kompliziert hier zu bedecken, so dass, wenn Sie Zweifel haben, die Apostrophe enthalten:

find . -type f -size 0 -exec /bin/rm -f '{}' + 

In Linux, briefer Ansätze sind in der Regel mit -delete. Beachten Sie, dass die letzte find-delete primäre direkt mit unlink (2) implementiert ist und nicht eine Zillion /bin/rm Befehle oder sogar die wenigen, die xargs und + tun. Mac OS find hat auch die -delete und -empty Vorwahlen.

find . -type f -empty -delete 

stampfen leer (und neu geleert) Dateien - Verzeichnisse als auch - viele modernen Linux-Hosts diesen effizienten Ansatz verwenden:

find . -empty -delete 
+1

+1 Dies ist die bessere Antwort. –

+1

Dieses _does_ verbessert die Portabilität, gewährt - aber 'find -exec ... {} +' ist über Linux hinaus verfügbar. Sofort unterstützen sowohl Solaris 11 als auch OS X diese jüngste Ergänzung der POSIX-Spezifikation für find (hinzugefügt in Ausgabe 6 von 1003.1). –

+0

Die '+' Syntax ist weniger portabel, aber immer noch ziemlich portabel. Es ist definitiv nicht auf einer Reihe von * alten * Unixen verfügbar, die 'xargs' haben. 'xargs' ist auch viel flexibler als das' +', obwohl die Frequenz, die diesen zusätzlichen Flex benötigt, wirklich niedrig ist. Ich füge jedoch die '+' Form hinzu. –

Verwandte Themen