Dieser Artikel setzt eine Reihe von Artikeln über die Linux-Shell fort und behandelt die drei nützlichsten Methoden zum Löschen von Dateien und Verzeichnissen. Wir haben auch Ausnahmefälle behandelt, wie das Löschen von Verzeichnissen mit einer großen Anzahl von Dateien darin, das Löschen von Dateien oder Verzeichnissen mit Sonderzeichen in ihren Namen. Verbessern Sie Ihre Linux-Kenntnisse in nur 5 Minuten.
„rmdir“-Befehl
Bevor Sie das rmdir verwenden müssen Sie wissen, dass Sie gelöschte Objekte nicht so einfach wiederherstellen können.
Öffnen Sie jetzt das Befehlszeilenterminal, wenn Sie Linux oder macOS verwenden. Wenn Sie Windows verwenden, können Sie das Windows-Subsystem für Linux (WSL) verwenden.
Bevor wir das Verzeichnis löschen, erstellen wir es zuerst:
$ mkdir /tmp/docs
Löschen wir es jetzt unter dem Namen /tmp/docs mit dem folgenden Befehl:
$ rmdir /tmp/docs
rmdir ist ein Befehl zum Entfernen leerer Verzeichnisse. Es ist sehr nützlich, da Sie davor geschützt sind, etwas Wichtiges aus Ihrem Dateisystem zu löschen.
Lassen Sie uns dieses Verhalten validieren, indem wir eine Datei in einem Verzeichnis ablegen, das wir löschen möchten:
$ mkdir -p /tmp/docs
$ touch /tmp/docs/my_file
$ tree /tmp/docs
/tmp/docs
└── my_file
0 directories, 1 file
Wenn Ihr Verzeichnis nicht leer ist, erhalten Sie die folgende Fehlermeldung:
$ rmdir /tmp/docs
rmdir: /tmp/docs: Directory not empty
Um das Verzeichnis zu löschen, das Dateien enthält, müssen Sie die rm verwenden Befehl:
$ rm -rf /tmp/docs
Löschen mehrerer Verzeichnisse mit Wildcard
Alle Konsolenbefehle in Linux können Dateien und Ordner mit Platzhaltern (*) im Datei- oder Ordnernamen verarbeiten. Lassen Sie uns die folgende Ordnerstruktur löschen:
$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
└── dir3
3 directories, 0 files
Um alle Verzeichnisse zu löschen, die mit dir beginnen wir müssen den folgenden Befehl verwenden:
$ rmdir /tmp/docs/dir*
Hier ist das erwartete Ergebnis:
$ tree /tmp/docs
/tmp/docs
0 directories, 0 files
„rm“-Befehl
Der rm Der Befehl ist ein Allzweckbefehl, der nicht nur Verzeichnisse, sondern auch Dateien löschen kann. Aber das Standardverhalten von rm Der Befehl erlaubt Ihnen nicht, Ordner zu löschen. Sie können -r verwenden oder -R Argumente zum Löschen von Verzeichnissen, einschließlich der Unterverzeichnisse.
Stellen wir uns vor, wir haben die folgende Dateisystemstruktur:
$ tree /tmp/docs
/tmp/docs
├── dir1
│ └── my_file1
├── dir2
│ └── my_file2
└── dir3
└── my_file3
3 directories, 3 files
Wenn Sie die Datei /tmp/docs löschen möchten Verzeichnis vollständig, verwenden Sie den folgenden Befehl:
$ rm -rf /tmp/docs
Wo:
- -r – ein Versuch, alle Unterverzeichnisse aus einem bestimmten Verzeichnis zu entfernen.
- -f – ein Versuch, die Dateien ohne vorherige Bestätigung oder Genehmigung zu entfernen.
/bin/rm:Argumentliste zu lang
Möglicherweise erhalten Sie diese Fehlermeldung, wenn Sie versuchen, ein Verzeichnis mit vielen Dateien zu löschen. Dieser Fehler tritt auf, weil die Anzahl der Dateien, die dem rm bereitgestellt werden Befehl ist größer als die Systemgrenze für die Größe des Befehlszeilenarguments.
Der einfachste Weg, einen solchen Ordner zu löschen, ist die Verwendung von Suchen Befehl, zuerst alle Dateien zu löschen und dann das Verzeichnis selbst zu löschen:
$ find /tmp/docs -type f -delete
$ rm -r /tmp/docs
Hier:
- /tmp/docs – Suchverzeichnis.
- -tippe f – weist das Find-Dienstprogramm an, nur Dateien zu durchsuchen.
- -löschen – weist das Find-Dienstprogramm an, gefundene Ergebnisse zu löschen.
Sie können auch einen leeren Ordner erstellen und rsync verwenden Dienstprogramm:
$ mkdir empty_dir
$ rsync -a --delete empty_dir/ /tmp/docs/
Dies ist CPU-intensiv, aber die schnellste Methode zum Bereinigen von /tmp/docs Verzeichnis.
"find"-Befehl
Der find-Befehl ist ein Mehrzweck-Befehlszeilendienstprogramm für die Suche, für das ein separater Artikel erforderlich ist, aber in unserem Fall verwenden wir ihn zum Löschen der Ordner.
Löschen mit Muster im Namen
Lassen Sie uns alle Verzeichnisse nach dem Muster dir* löschen in verschachtelten Verzeichnisnamen:
$ tree /tmp/docs
/tmp/docs
├── dir1
│ └── my_file1
├── dir2
│ └── my_file2
└── dir3
└── my_file3
3 directories, 3 files
Verwenden Sie dazu den folgenden Befehl:
$ find /tmp/docs -type d -name 'dir*' -exec rm -rf {} +
$ tree /tmp/docs
/tmp/docs
0 directories, 0 files
Hier das finden Der Befehl gibt alle verschachtelten Verzeichnisse zurück, deren Name mit dir beginnt :
$ find /tmp/docs -type d -name 'dir*'
/tmp/docs/dir2
/tmp/docs/dir3
/tmp/docs/dir1
Und dann führt es das bereits bekannte rm -rf aus Befehl für jeden Befund (deshalb verwenden wir {} + Reihenfolge).
Entferne alle leeren Verzeichnisse in der Ordnerstruktur
In vielen Fällen möchten Sie möglicherweise nur leere Ordner innerhalb der Ordnerstruktur löschen. Lassen Sie uns dir1 löschen und other_dir aus dem folgenden Beispiel:
$ tree /tmp/docs
/tmp/docs
├── dir1
├── dir2
│ └── my_file2
├── dir3
│ └── my_file3
└── other_dir
4 directories, 2 files
So geht's:
$ find /tmp/docs -type d -empty -delete
$ tree /tmp/docs
/tmp/docs
├── dir2
│ └── my_file2
└── dir3
└── my_file3
2 directories, 2 files
Dateien mit Sonderzeichen löschen (durch Inode)
Wenn Ihr Verzeichnisname Sonderzeichen enthält oder aus nicht-englischen Wörtern besteht, dann üblich rm oder rmdir Befehl funktioniert möglicherweise nicht für Sie. In diesem Fall können Sie dieses Verzeichnis löschen, indem Sie seinen Inode verwenden.
Inode – ist eine Indexknotennummer, die eine Datei oder ein Verzeichnis im Dateisystem darstellt.
Sie können die Datei- oder Verzeichnis-Inode-Nummer mit dem folgenden Befehl finden:
$ ls -il /tmp/docs
total 0
8669007889 drwxr-xr-x 3 amaksimov wheel 96 Dec 1 18:48 dir2
8669007891 drwxr-xr-x 3 amaksimov wheel 96 Dec 1 18:46 dir3
In diesem Beispiel dir2 Ordner hat den Inode 8669007889 Nummer.
Jetzt können wir diese Informationen verwenden, um sie zu löschen:
$ find /tmp/docs -inum 8669007889 -exec rm -rf {} +
Hier:
- -inum – weist das Find-Dienstprogramm an, nach dem Dateisystemobjekt mit der Inode-Nummer 8669007889 zu suchen .
- -exec rm -rf – weist das Find-Dienstprogramm an, rm mit -rm aufzurufen Argumente für jeden Befund ({} + ).
Zusammenfassung
In diesem Artikel haben wir drei Möglichkeiten zum Löschen von Verzeichnissen in Linux beschrieben. Wir haben auch Sonderfälle wie das Löschen großer Ordner oder Verzeichnisse mit Sonderzeichen im Namen behandelt.
Wir hoffen, dass Sie diesen Artikel nützlich finden. Wenn ja, helfen Sie uns bitte, es auf der ganzen Welt zu verbreiten.
Wenn Sie weitere interessante Anwendungsfälle kennen, die in diesem Artikel behandelt werden könnten, kontaktieren Sie uns bitte im Kommentarbereich unten.