it-swarm.com.de

Wie lösche ich viele Byte-Dateien in Linux?

Ich habe ein Verzeichnis mit vielen 0-Byte-Dateien. Ich kann die Dateien nicht einmal sehen, wenn ich den Befehl ls verwende. Ich verwende ein kleines Skript, um diese Dateien zu löschen, aber manchmal löscht sie diese Dateien nicht einmal. Hier ist das Skript:

i=100
while [ $i -le 999 ];do
    rm -f file${i}*;
    let i++;
done

Gibt es eine andere Möglichkeit, dies schneller zu tun?

48
small_ticket

Verwenden Sie find in Kombination mit xargs.

find . -name 'file*' -size 0 -print0 | xargs -0 rm

Sie vermeiden, rm für jede Datei zu starten.

105
Didier Trosset

Mit find von GNU (siehe Kommentare) müssen Sie xargs nicht verwenden:

find -name 'file*' -size 0 -delete
71
coredump

Sie können den folgenden Befehl verwenden: 

finden . -maxdepth 1 -size 0c -exec rm {} \;

Wenn Sie auch die 0-Byte-Dateien in Unterverzeichnissen löschen möchten, lassen Sie -maxdepth 1 im vorherigen Befehl aus und führen Sie sie aus.

5
jitendra

Löschen Sie alle Dateien mit dem Namen file ... im aktuellen Verzeichnis:

find . -name file* -maxdepth 1 -exec rm {} \;

Dies dauert immer noch sehr lange, da rm für jede Datei gestartet wird.

4
Sjoerd
find . -maxdepth 1 -type f -size 0 -delete

Dadurch werden die Dateien mit der Größe 0 im aktuellen Verzeichnis gefunden, ohne in Unterverzeichnisse zu gehen und sie zu löschen.

So listen Sie die Dateien auf, ohne sie zu entfernen:

find . -maxdepth 1 -type f -size 0
3
user7194913

sie können sogar die Option -delete verwenden, wodurch die Datei gelöscht wird.

von mann finden, -löschen Dateien löschen; wahr, wenn das Entfernen erfolgreich war.

2
thegeek

Hier ist ein Beispiel. Wenn Sie es selbst ausprobieren, wird dies sinnvoll sein:

bash-2.05b$ touch empty1 empty2 empty3
bash-2.05b$ cat > fileWithData1
Data Here
bash-2.05b$ ls -l
total 0
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty1
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty2
-rw-rw-r--    1 user group           0 Jul  1 12:51 empty3
-rw-rw-r--    1 user group          10 Jul  1 12:51 fileWithData1
bash-2.05b$ find . -size 0 -exec rm {} \;
bash-2.05b$ ls -l
total 0
-rw-rw-r--    1 user group          10 Jul  1 12:51 fileWithData1

Wenn Sie in der Manpage nach find (Typ man find) suchen, werden Sie eine Reihe leistungsfähiger Optionen für diesen Befehl sehen.

1
Noel M

Wenn Sie ein Level aufsteigen, lohnt es sich herauszufinden, warum die Dateien vorhanden sind. Sie behandeln nur ein Symptom, indem Sie sie löschen. Was ist, wenn ein Programm sie zum Sperren von Ressourcen verwendet? Wenn dies der Fall ist, führt das Löschen zu Korruption. 

so können Sie herausfinden, welche Prozesse die leeren Dateien in den Griff bekommen.

0
Paul Rubel

Wenn Sie alle 0-Byte-Dateien in einem Ordner suchen und entfernen möchten:

find /path/to/folder -size 0 -delete
0
Lão Còi

"... manchmal löscht das nicht einmal diese Dateien" Ich denke, das könnte etwas sein, was Sie regelmäßig tun. In diesem Fall entfernt dieses Perl-Skript alle regulären 0-Byte-Dateien in Ihrem aktuellen Verzeichnis. Es vermeidet die Verwendung von rm durch einen Systemaufruf (unlink) und ist recht schnell.

#!/usr/bin/env Perl
use warnings;
use strict;

my @files = glob "* .*";
for (@files) {
    next unless -e and -f;
    unlink if -z;
}
0
andereld