So löschen Sie ein großes Verzeichnis mit Dateien unter Linux
Die Dateiverwaltung ist eine der häufigsten Aufgaben, die ein Benutzer auf einem Linux-System ausführt, einschließlich des Erstellens, Kopierens, Verschiebens, Änderns und Löschens von Dateien und Verzeichnissen.
Dieser Artikel enthält einige Befehlszeilentipps, wie Sie ein großes Verzeichnis löschen können, das Tausende von Dateien in einem Linux-System enthält.
Dateien unter Linux löschen
Die gebräuchlichste Methode zum Löschen von Dateien auf einem Linux-System ist die Verwendung des Befehls rm, der das folgende Syntaxformat annimmt:
$ rm [ options ] sample_file.txt
Um beispielsweise eine Textdatei mit dem Namen file1.txt zu löschen, führen Sie den folgenden Befehl aus:
$ rm file1.txt
Um das Entfernen einer Datei zu erzwingen, ohne um Erlaubnis gebeten zu werden, übergeben Sie das Flag -f wie folgt.
$ rm -f file1.txt
Verzeichnis unter Linux löschen
Führen Sie den folgenden Befehl aus, um ein Verzeichnis mit dem Namen sample_directory zu entfernen oder zu löschen:
$ rm -rf sample_directory
Die Option -r löscht rekursiv das Verzeichnis zusammen mit allen darin enthaltenen Unterverzeichnissen und Dateien.
Um ein leeres Verzeichnis zu löschen oder zu entfernen, verwenden Sie den Befehl rmdir, der sich als nützlich erweist, wenn Sie ein leeres Verzeichnis mit dem Namen test_directory entfernen möchten, wie gezeigt:
$ rmdir test_directory
Löschen Sie ein großes Verzeichnis mit Tonnen von Dateien
Wenn der Befehl rm ausgeführt wird, entfernt das Dateisystem nur den Link zur Datei, wodurch die Datei für den Benutzer nicht verfügbar ist, aber im eigentlichen Sinne bleiben die Daten der Datei selbst auf der Festplatte intakt.
Daher wird bei der Ausgabe des Befehls rm nur der Verweis auf die Dateien entfernt, wodurch die Speicherblöcke im Dateisystem freigegeben werden.
Daher gibt es mehrere Möglichkeiten, Dateien unter Linux zu löschen.
Löschen Sie Dateien mit Inode-Nummer unter Linux
Sie können z. B. eine Datei anhand ihrer Inode-Nummer löschen. Sie können die Inode-Nummer einer Datei mit dem Befehl stat ermitteln, wie gezeigt.
$ stat file1.txt
File: file.txt
Size: 4076 Blocks: 8 IO Block: 4096 regular file
Device: 801h/2049d Inode: 1573697 Links: 1
Access: (0664/-rw-rw-r--) Uid: ( 1000/ tecmint) Gid: ( 1000/ tecmint)
Access: 2023-05-08 12:10:55.656070248 +0530
Modify: 2023-05-08 12:10:55.656070248 +0530
Change: 2023-05-08 12:10:55.656070248 +0530
Darüber hinaus können Sie das Flag -i im Befehl ls übergeben, wenn Sie Dateien in einem Verzeichnis auflisten.
$ ls -li
1573697 .rw-rw-r-- tecmint tecmint 4.0 KB Mon May 8 12:10:55 2023 file1.txt
Um die Datei mit ihrem Inode zu entfernen, verwenden Sie den Befehl find, wie in der folgenden Syntax gezeigt.
$ find /path/to/file -inum INODE_NUM -exec rm -i {} +
In unserem Beispiel lautet der Befehl zum Entfernen von Datei-file1.txt, die sich im aktuellen Verzeichnis befindet:
$ find /path/to/file -inum 1573697 -exec rm -i {} +
Drücken Sie 'y', um das Entfernen zu bestätigen, und drücken Sie ENTER.
Sehen wir uns nun an, wie man große Verzeichnisse mit Tausenden von Dateien löscht.
Erstellen Sie ein Verzeichnis mit Tausenden von Dateien
Der gute alte rm-Befehl ist der schnellste Weg, um ein großes Verzeichnis mit Tausenden von Dateien zu löschen. Um dies zu demonstrieren, erstellen wir zunächst ein Beispielverzeichnis und navigieren in dieses Verzeichnis.
$ mkdir test_dir
cd test_dir
Als nächstes erstellen wir eine wahnsinnig große Anzahl von Dateien, in diesem Fall 500.000 Textdateien, indem wir die folgende Bash-for-A-Schleife verwenden.
$ time for item in {1..500000}; do touch file_name$item.txt; done
HINWEIS: Der obige Befehl ist ressourcenintensiv und verbraucht daher erheblich CPU und RAM. Es dauert auch einige Zeit, abhängig von Ihren Systemspezifikationen. In meinem Fall führe ich eine VM mit 4 GB RAM und 3 CPUs aus.
Der schnellste Weg, das Verzeichnis unter Linux zu löschen
Der schnellste Weg, ein großes Verzeichnis zu löschen, ist die Verwendung des guten alten rm-Verzeichnisses, wie unten gezeigt. Hier zeigt die Option time die Zeit an, die für die erfolgreiche Ausführung des Befehls benötigt wurde.
$ time rm -rf /test_dir
Aus der Ausgabe können Sie ersehen, dass es ungefähr 6 Sekunden gedauert hat, das gesamte Verzeichnis zu löschen.
Löschen eines großen Verzeichnisses mit dem Befehl "Suchen"
Eine andere Möglichkeit, große Verzeichnisse zu löschen, ist die Verwendung des Befehls find, wie in der folgenden Syntax gezeigt.
$ time find /path/to/directory -delete
Obwohl nicht so schnell wie der rm-Befehl, erledigt er immer noch die Arbeit.
$ time find test_dir -delete
Großes Verzeichnis mit dem Perl-Befehl löschen
Ein anderer Ansatz besteht darin, die Skriptsprache Perl innerhalb des Verzeichnisses zu verwenden, um Tonnen von Dateien zu entfernen.
$ cd test_dir
time perl -e 'for(<*>){((stat)[9]<(unlink))}'
Aus der Ausgabe können Sie entnehmen, dass es viel länger gedauert hat, alle Dateien im Verzeichnis zu löschen, als bei den vorherigen Befehlen, die wir uns zuvor angesehen haben.
Schlussfolgerung
Da haben Sie es. In dieser Anleitung haben wir uns angesehen, wie Sie große Verzeichnisse löschen können, die Tausende von Dateien auf einem Linux-System enthalten.




