it-swarm.com.de

Linux-Löschdatei mit Größe 0

Wie lösche ich eine bestimmte Datei in Linux, wenn ihre Größe 0 ist? Ich möchte dies in einer Crontab ohne zusätzliches Skript ausführen.

l filename.file | grep 5th-tab | not eq 0 | rm

Etwas wie das?

147
Franz Kafka

Dadurch werden alle Dateien in einem Verzeichnis (und darunter) mit der Größe Null gelöscht.

find /tmp -size  0 -print0 |xargs -0 rm --

Wenn Sie nur eine bestimmte Datei möchten;

if [ ! -s /tmp/foo ] ; then
  rm /tmp/foo
fi
198
Paul Tomblin

sie möchten find verwenden:

 find . -size 0 -delete
243
James.Xu

So suchen und löschen Sie leere Dateien im aktuellen Verzeichnis und in den Unterverzeichnissen:

find . -type f -empty -delete

-type f ist notwendig, da auch Verzeichnisse mit der Größe Null gekennzeichnet sind.


Der Punkt . (aktuelles Verzeichnis) ist das Startverzeichnis für die Suche. Wenn Sie GNU find haben (z. B. nicht Mac OS), können Sie es in diesem Fall weglassen:

find -type f -empty -delete

Von GNU find Dokumentation :

Wenn keine zu durchsuchenden Dateien angegeben sind, wird das aktuelle Verzeichnis (.) Verwendet.

112
Antonio

Sie können dazu den Befehl find verwenden. Wir können Dateien mit -type f Und leere Dateien mit -size 0 Abgleichen. Dann können wir die Übereinstimmungen mit -delete Löschen.

find . -type f -size 0 -delete
14
PYK

Dies funktioniert für einfaches BSD und sollte daher universell mit allen Geschmacksrichtungen kompatibel sein. Unter.e.g in pwd (.)

find . -size 0 |  xargs rm
4
user1874594

Unter Linux ist der Befehl stat (1) nützlich, wenn Sie find (1) nicht benötigen:

(( $(stat -c %s "$filename") )) || rm "$filename"

Mit dem Befehl stat können wir nur die Dateigröße abrufen, das ist der -c %s (Andere Formate finden Sie auf den Manpages). Ich führe das stat-Programm aus und erfasse seine Ausgabe, das ist die $( ). Diese Ausgabe wird numerisch gesehen, das ist der äußere (( )). Wenn für die Größe Null angegeben wird, ist dies FALSCH, und der zweite Teil von OR) wird ausgeführt. Nicht-Null (nicht leere Datei) ist WAHR, daher ist das rm nicht wahr hingerichtet.

3
cdarke

Für ein nicht rekursives Löschen (mit du und awk):

rm `du * | awk '$1 == "0" {print $2}'`
2
Harrison
find . -type f -empty -exec rm -f {} \;
1
Diệu Thu Lê