Löschen Sie das Linux-Verzeichnis. Befehl RMDIR (RD) - Löschen Sie ein Verzeichnis des Windows-Dateisystems. Ordner über die Befehlszeile entfernen

V Betriebssysteme in der Basis Linux-Kernel normalerweise werden viele leere und nicht leere Verzeichnisse gespeichert. Einige von ihnen nehmen viel Speicherplatz ein und werden oft überflüssig. In diesem Fall wäre es die richtige Option, sie zu entfernen. Es gibt mehrere Möglichkeiten, die Reinigung durchzuführen, von denen jede in einer bestimmten Situation anwendbar ist. Schauen wir uns alles an verfügbare Methoden ausführlicher, und Sie werden die für Ihre Bedürfnisse am besten geeignete auswählen.

Im Rahmen dieses Artikels werden wir über Konsolen-Utilities und zusätzliche Tools sprechen, die durch Eingabe von Befehlen gestartet werden. Vergessen Sie jedoch nicht, dass in Distributionen häufig grafische Shells implementiert sind. Dementsprechend müssen Sie zum Löschen eines Verzeichnisses nur über . darauf zugreifen Dateimanager, klicke mit der rechten Maustaste auf das Symbol und wähle "Löschen"... Vergessen Sie nicht, danach den Papierkorb zu leeren. Diese Option gilt jedoch nicht für alle Benutzer, daher empfehlen wir Ihnen, sich mit den folgenden Anleitungen vertraut zu machen.

Bevor Sie mit den Methoden beginnen, ist es wichtig zu beachten, dass Sie bei der Eingabe eines Befehls meistens selbst den Namen des Ordners angeben, den Sie löschen möchten. Wenn Sie sich nicht an seinem Speicherort befinden, müssen Sie den vollständigen Pfad angeben. Wenn möglich, empfehlen wir Ihnen, das übergeordnete Verzeichnis des Objekts herauszufinden und über die Konsole dorthin zu wechseln. Diese Aktion dauert buchstäblich ein paar Minuten:


Wenn Sie den Standort nicht bestimmen können, müssen Sie beim Löschen den vollständigen Pfad selbst eingeben, also müssen Sie ihn kennen.

Methode 1: Standardbefehle "Terminal"

In der Befehlsshell jeder Linux-Distribution gibt es eine Reihe grundlegender Dienstprogramme und Tools, mit denen Sie eine Vielzahl von Aktionen ausführen können Systemeinstellungen und Dateien, einschließlich Löschen von Verzeichnissen. Es gibt mehrere solcher Dienstprogramme, und jedes ist in einer bestimmten Situation am nützlichsten.

Rmdir-Befehl

Zunächst möchte ich rmdir berühren. Es wurde entwickelt, um das System nur von leeren Verzeichnissen zu bereinigen. Es entfernt sie dauerhaft, und der Vorteil dieses Tools ist seine Einfachheit der Syntax und die Fehlerfreiheit. Es reicht aus, den Ordner rmdir in der Konsole zu registrieren, wo Mappe- der Name des Ordners am aktuellen Speicherort. Das Tool wird durch Drücken der Taste aktiviert Eingeben.

Nichts hindert Sie daran, den vollständigen Pfad zum Verzeichnis anzugeben, wenn Sie nicht zum erforderlichen Speicherort navigieren können oder dies nicht erforderlich ist. Dann hat die Zeile beispielsweise folgende Form: rmdir / home / user / folder / folder1, wobei Nutzer- Benutzername, Mappe Ist das übergeordnete Verzeichnis und Ordner1- Ordner zu löschen. Bitte beachten Sie, dass vor Home ein Schrägstrich gesetzt werden muss und dieser am Ende des Pfades fehlen darf.

Rm-Befehl

Das vorherige Tool ist Teil des Dienstprogramms rm. Anfangs ist es beabsichtigt, Dateien zu löschen, aber wenn Sie ihm ein entsprechendes Argument geben, wird auch der Ordner gelöscht. Diese Option ist bereits für nicht leere Verzeichnisse geeignet, in der Konsole müssen Sie den Ordner rm -R (oder den vollständigen Pfad zum Verzeichnis) eingeben. Achte auf die Argumentation -R- es startet ein rekursives Löschen, dh es berührt den gesamten Inhalt des Ordners und sich selbst. Bei der Eingabe muss die Groß-/Kleinschreibung beachtet werden, denn -R Ist eine ganz andere Möglichkeit.

Wenn Sie eine Liste aller anzeigen möchten gelöschte Dateien und Ordner, wenn Sie rm verwenden, müssen Sie die Zeile ein wenig ändern. Geben Sie ein "Terminal" rm -Rfv Ordner und aktivieren Sie dann den Befehl.

Nach Abschluss der Deinstallation werden Informationen zu allen Verzeichnissen und einzelnen Objekten angezeigt, die sich zuvor am angegebenen Ort befanden.

Befehl suchen

Unsere Site enthält bereits Material mit Beispielen für die Verwendung von find in Betriebssystemen, die auf dem Linux-Kernel entwickelt wurden. Natürlich werden dort nur die grundlegenden und nützlichsten Informationen präsentiert. Sie können sich damit vertraut machen, indem Sie auf den folgenden Link klicken, und jetzt schlagen wir vor, herauszufinden, wie dieses Tool funktioniert, wenn Sie Verzeichnisse löschen müssen.

  1. Wie bekannt, finden dient der Suche nach Objekten innerhalb des Systems. Durch die Verwendung zusätzlicher Optionen können Sie Verzeichnisse mit einem bestimmten Namen finden und sofort löschen. Geben Sie dazu in der Konsole find ein. -type d -name "Ordner" -exec rm -rf() \;, wobei Ordner der Name des Verzeichnisses ist. Achten Sie darauf, doppelte Anführungszeichen zu schreiben.
  2. Manchmal wird in einer separaten Zeile angezeigt, dass eine solche Datei oder ein solches Verzeichnis nicht existiert, dies bedeutet jedoch nicht, dass es nicht gefunden wurde. Gerade finden funktionierte nach dem Löschen des Verzeichnisses aus dem System wieder.
  3. find ~ / -empty -type d -delete ermöglicht es Ihnen, alle leeren Ordner auf dem System zu löschen. Einige von ihnen sind nur für den Superuser zugänglich, also vorher finden sudo sollte hinzugefügt werden.
  4. Der Bildschirm zeigt Informationen über alle gefundenen Objekte und den Erfolg der Operation an.
  5. Sie können auch nur ein bestimmtes Verzeichnis angeben, in dem das Tool sucht und aufräumt. Dann sieht die Zeile so aus: find / home / user / Folder / -empty -type d -delete.

Damit ist die Interaktion mit den Standard-Konsolendienstprogrammen in Linux abgeschlossen. Wie Sie sehen, gibt es eine große Anzahl von ihnen und jede ist in bestimmten Situationen anwendbar. Wenn Sie sich mit anderen beliebten Befehlen vertraut machen möchten, lesen Sie unser separates Material unter dem folgenden Link.

Die Befehle rm und rmdir löschen Dateien und Verzeichnisse auf Linux, macOS und anderen Unix-ähnlichen Betriebssystemen. Sie ähneln den Befehlen del und deltree in Windows und DOS. Diese Befehle sind sehr mächtig und haben einige Optionen.

Es ist wichtig zu beachten, dass mit rm und rmdir gelöschte Dateien und Verzeichnisse nicht in den Papierkorb verschoben werden. Sie werden sofort von Ihrem Computer entfernt. Wenn Sie mit diesen Befehlen versehentlich Dateien gelöscht haben, können Sie sie nur aus einem Backup wiederherstellen.

So löschen Sie Dateien mit rm

Der einfachste Fall besteht darin, eine Datei im aktuellen Verzeichnis zu löschen. Geben Sie den Befehl rm gefolgt von einem Leerzeichen gefolgt vom Namen der Datei ein, die Sie löschen möchten.

Rm-Datei_1.txt

Wenn sich die Datei nicht im aktuellen Arbeitsverzeichnis befindet, geben Sie den Pfad zum Speicherort der Datei an.

Rm ./path/to/the/file/file_1.txt

Sie können mehr als einen Dateinamen an rm übergeben. Dadurch werden alle angegebenen Dateien entfernt.

Rm Datei_2.txt Datei_3.txt

Platzhalter können verwendet werden, um Gruppen von zu löschenden Dateien auszuwählen. Unterschrift * stellt mehrere Zeichen dar, und das Zeichen ? steht für ein Zeichen. Dieser Befehl löscht alle Dateien PNG-Bilder im aktuellen Arbeitsverzeichnis.

Rm * .png

Dieser Befehl löscht alle Dateien mit derselben symbolischen Erweiterung. Dadurch werden beispielsweise File.1 und File.2 entfernt, aber nicht File.12.

Rm*.?

Wenn die Datei schreibgeschützt ist, werden Sie aufgefordert, die Datei zu löschen. Sie müssen mit . antworten ja oder n und drücken Sie "Enter".

Um das Risiko der Verwendung von rm mit Platzhaltern zu verringern, verwenden Sie die Option -ich(interaktiv). Dazu müssen Sie das Löschen jeder Datei bestätigen.

Rm -i * .dat

Möglichkeit -F(Kraft) ist das Gegenteil von interaktiv. Es fragt nicht nach einer Bestätigung, selbst wenn die Dateien schreibgeschützt sind.

Rm -f Dateiname

So entfernen Sie Verzeichnisse mit rm

Um ein leeres Verzeichnis zu entfernen, verwenden Sie die Option -D(Verzeichnis). Sie können Platzhalter (* und?) sowohl in Verzeichnisnamen als auch in Dateinamen verwenden.

Rm -d Verzeichnis

Wenn Sie mehr als einen Verzeichnisnamen angeben, werden alle angegebenen leeren Verzeichnisse entfernt.

Rm -d Verzeichnis1 Verzeichnis2 / Pfad / zu / Verzeichnis3

Um nicht leere Verzeichnisse zu entfernen, verwenden Sie den Parameter -R(rekursiv). Um es klarzustellen, dies entfernt Verzeichnisse und alle darin enthaltenen Dateien und Unterverzeichnisse.

Rm -r Verzeichnis1 Verzeichnis2 Verzeichnis3

Wenn das Verzeichnis oder die Datei schreibgeschützt ist, werden Sie aufgefordert, das Löschen zu bestätigen. Um nicht leere Verzeichnisse zu entfernen und diese Eingabeaufforderungen zu unterdrücken, verwenden Sie die Optionen zusammen -R(rekursiv) und -F(gezwungen).

Rm -rf-Verzeichnis

Hier ist Vorsicht geboten. Teamfehler rm -rf kann zu Datenverlust oder Systemfehlern führen. Es ist gefährlich, und Vorsicht ist die beste Politik. Um eine Vorstellung von der Verzeichnisstruktur und den Dateien zu bekommen, die mit dem Befehl rm -rf entfernt werden, verwenden Sie den Befehl tree.

Verwenden Sie apt-get, um dieses Paket auf Ihrem System zu installieren, wenn Sie Ubuntu oder eine andere Debian-basierte Distribution verwenden. In anderen Linux-Distributionen Verwenden Sie das Paketverwaltungstool Ihrer Linux-Distribution.

Sudo apt-get install tree

Die Ausführung des Befehls tree liefert ein leicht verständliches Diagramm der Verzeichnis- und Dateistruktur unter dem Verzeichnis, aus dem es gestartet wird.

Sie können auch den Pfad zum Tree-Befehl angeben, damit der Tree aus einem anderen Verzeichnis im Dateisystem gestartet wird.

Baumpfad / zum / Verzeichnis

Der Befehl rm hat auch die Optionen --one-file-system, --no-preserve-root, --preserve-root, aber diese werden nur für fortgeschrittene Benutzer empfohlen. Wenn Sie etwas falsch machen, können Sie versehentlich alle Ihre Systemdateien löschen.

So entfernen Sie Verzeichnisse mit rmdir

Es gibt einen weiteren rmdir-Befehl, mit dem Sie Verzeichnisse entfernen können. Der Unterschied zwischen rm und rmdir besteht darin, dass rmdir nur leere Verzeichnisse löschen kann. Es wird niemals Dateien löschen.

Der einfachste Fall besteht darin, ein leeres Verzeichnis zu löschen. Wie bei rm können Sie für einen Verzeichnispfad mehrere Verzeichnisnamen an rmdir oder rmdir übergeben.

Entfernen Sie ein Verzeichnis im aktuellen Verzeichnis, indem Sie seinen Namen an rmdir übergeben:

Rmdir-Verzeichnis

Entfernen Sie mehrere Verzeichnisse, indem Sie die Namensliste an rmdir übergeben:

Rmdir Verzeichnis1 Verzeichnis2 Verzeichnis3

Löschen Sie ein Verzeichnis, das sich nicht im aktuellen Verzeichnis befindet, und geben Sie den vollständigen Pfad zu diesem Verzeichnis an:

Rmdir / Pfad / zum / Verzeichnis

Wenn Sie versuchen, einen nicht leeren Ordner zu löschen, gibt rmdir eine Fehlermeldung aus. Im folgenden Beispiel löscht rmdir erfolgreich und im Hintergrund das Client-Verzeichnis, weigert sich jedoch, das Projektverzeichnis zu löschen, da es Dateien enthält. Das Projektverzeichnis bleibt unverändert und die darin enthaltenen Dateien sind intakt.

Wenn rmdir den Fehler "Verzeichnis nicht leer" ausgibt, stoppt es die Verarbeitung von Verzeichnissen, die ihm auf der Befehlszeile übergeben wurden. Wenn Sie gebeten haben, vier Verzeichnisse und die ersten enthaltenen Dateien zu löschen, gibt rmdir eine Fehlermeldung aus und tut nichts weiter. Sie können es erzwingen, diese Fehler mit --ignore-fail-on-non-empty zu ignorieren, um andere Verzeichnisse zu behandeln.

Im folgenden Beispiel wurden zwei Ordner nach rmdir übertragen, work/reports und work/quotes. Die Option --ignore-fail-on-non-empty ist im Befehl enthalten. Der Ordner work/reports enthält Dateien, sodass rmdir ihn nicht löschen kann. Die Option --ignore-fail-on-non-empty bewirkt, dass rmdir den Fehler ignoriert und zum nächsten Ordner übergeht, der verarbeitet werden soll, nämlich work/quotes. Es ist ein leerer Ordner und rmdir entfernt ihn.

Dieser Befehl wurde verwendet.

Rmdir --ignore-fail-on-non-leer work/reports/work/quotes

Sie können die Option verwenden -P(parent), um ein Verzeichnis sowie seine übergeordneten Verzeichnisse zu entfernen. Dieser Trick funktioniert, weil rmdir im Zielverzeichnis beginnt und dann auf das übergeordnete Verzeichnis zurückfällt. Dieses Verzeichnis sollte jetzt leer sein, damit es von rmdir entfernt werden kann und der Vorgang den Schritt zurück entlang des von rmdir bereitgestellten Pfads wiederholt.

Im folgenden Beispiel wird der Befehl an rmdir übergeben:

Rmdir -p Arbeit / Rechnungen

Die Rechnungen und Arbeitsverzeichnisse werden auf Wunsch entfernt.

Benutzt du Bash oder eine andere Shell? Linux bietet flexible und leistungsstarke Befehle zum Löschen von Verzeichnissen und Dateien direkt von der Terminal-Befehlszeile aus. Manche Leute bevorzugen einen Workflow, der sich um das Terminal dreht. Andere haben in dieser Angelegenheit möglicherweise keine Wahl. Sie können auf Servern ohne installierte GUI oder in einer Remote-Sitzung auf einem eigenständigen System wie einem Raspberry Pi ausgeführt werden. Diese Befehle sind perfekt für diese Personengruppe.

Aber welche Art von Workflow Sie auch bevorzugen, diese Befehle sind sehr gut geeignet, um in Shell-Skripte eingebunden zu werden. Wenn das Skript von einem Cron-Job ausgeführt wird, kann es dazu beitragen, routinemäßige Wartungsaufgaben wie das Löschen unerwünschter Protokolldateien zu automatisieren. Wenn Sie diesen Anwendungsfall untersuchen, sollten Sie sich der Leistungsfähigkeit dieser Befehle bewusst sein, alles sorgfältig testen und immer eine letzte Sicherung aufbewahren.

Welchen Befehl kann ich verwenden?
Antworten: Um ein Verzeichnis (in Windows und Mac OS auch als "Ordner" bekannt) zu löschen, können Sie die folgenden Befehle verwenden:

  • rmdir- löscht das angegebene Verzeichnis, solange es leer sein muss, d.h. keine Dateien enthalten.
  • rm- entfernt das angegebene Verzeichnis zusammen mit allen angehängten Dateien und Verzeichnissen.

Befehlssyntax rmdir

rmdir entfernt Verzeichnis(se) nur, wenn sie keine Dateien enthalten. Die Befehlssyntax ist ziemlich einfach:

rmdir Verzeichnisname
rmdir [Option] Verzeichnisname

Beispiele von

Öffnen Sie ein Terminal und geben Sie den folgenden Befehl ein, um das Verzeichnis zu entfernen /tmp/docs :

rmdir / tmp / docs

Wenn das Verzeichnis Dateien enthält, gibt der Befehl einen Fehler aus:

$ rmdir Buchstaben
rmdir: Buchstaben: Verzeichnis nicht leer

Sie können in das Verzeichnis gehen und herausfinden, welche Art von Dateien dort gespeichert sind:

$ CD-Buchstaben
$ ls

Im folgenden Beispiel werden wir die Verzeichnisse data, foo und bar entfernen. Der Aufbau dieser Verzeichnisse ist wie folgt: data enthält nur das Verzeichnis foo, das wiederum nur die leere Verzeichnisleiste enthält. Mit dem folgenden Befehl können Sie alle diese Verzeichnisse auf einmal löschen:

cd / home / nixcraft
rmdir -p Daten / foo / bar

  • Parameter -P weist den Befehl an, leere Verzeichnisse entlang des angegebenen Pfads zu löschen. Jene. in unserem Beispiel werden alle drei Verzeichnisse gelöscht, da sie enthalten keine Dateien, sondern nur leere Unterverzeichnisse.

Entfernen Sie das gesamte Verzeichnis mit allen angehängten Dateien und Verzeichnissen mit dem Befehl rm

Im Arbeitsalltag ist es viel häufiger notwendig, nicht leere Verzeichnisse zu löschen, hier hilft der Befehl rm... Sie können beispielsweise den gesamten Inhalt des Briefverzeichnisses mit dem Befehl (Achtung! Löschen ohne Bestätigung) löschen:

$ rm -rf Buchstaben /

  • -R- gibt an, dass das Löschen rekursiv erfolgen soll, d.h. Gehen Sie die gesamte Liste der Dateien und Ordner durch und versuchen Sie, jede von ihnen zu löschen.
  • -F- Löschung ohne Rückfrage.

Weitere Informationen zu Befehlen rmdir und rm

Um zu bekommen Zusätzliche Information Für diese Befehle können Sie immer die folgende Standardbefehlsreferenz-Hilfedokumentation verwenden:

Mann mkdir
Mann rm

Warum gibt es zwei verschiedene Befehle für dieselbe Operation?

Es scheint, warum einen separaten Befehl erstellen, um nur leere Verzeichnisse zu löschen, wenn Sie verwenden können rm? Aber wenn man darüber nachdenkt, versteht man, dass es einfach eine großartige Idee war! Wieso den? Da es unmöglich ist, sich daran zu erinnern, welche und wo Dateien gespeichert sind, und wenn Sie ein Verzeichnis mit einem dummen oder verdächtigen Namen (offensichtlich versehentlich erstellt) löschen müssen, können Sie den sicheren Befehl verwenden rmdir, was einen Fehler ausgibt, wenn sich Dateien in diesem Verzeichnis befinden. Sehr bequem! Dies schützt vor versehentlichem Löschen.

Basierend auf Materialien von der ausgezeichneten Website cyberciti.biz. Wünsche dir einen schönen Tag und mach weiter so!

Um eine Datei oder ein Verzeichnis unter Linux von der Befehlszeile zu entfernen, verwenden Sie den Befehl rm (remove).

Seien Sie beim Löschen von Dateien oder Verzeichnissen mit dem Befehl rm besonders vorsichtig, da eine einmal gelöschte Datei nicht wiederhergestellt werden kann.

In diesem Artikel zeigen wir Ihnen, wie Sie mit dem Befehl rm Dateien und Verzeichnisse löschen, mit Beispielen und Erläuterungen zu den gängigsten rm-Optionen.

So löschen Sie Dateien

  • Um eine einzelne Datei zu entfernen, verwenden Sie den Befehl rm gefolgt vom Dateinamen:

    rm Dateiname

    Wenn die Datei schreibgeschützt ist, werden Sie wie unten gezeigt zur Bestätigung aufgefordert. Geben Sie y ein und drücken Sie die Eingabetaste, um die Datei zu löschen. Andernfalls, wenn die Datei nicht schreibgeschützt ist, wird sie ohne Aufforderung gelöscht.

    rm: schreibgeschützte reguläre leere Datei "Dateiname" entfernen?

  • Um mehrere Dateien gleichzeitig zu löschen, verwenden Sie den Befehl rm gefolgt von den Dateinamen, getrennt durch ein Leerzeichen.

    rm Dateiname1 Dateiname2 Dateiname3

    Sie können auch verwenden Platzhalter(*) und Reguläre Ausdrücke um mehrere Dateien abzugleichen. Um beispielsweise alle .pdf-Dateien im aktuellen Verzeichnis zu entfernen, verwenden Sie den folgenden Befehl:

    rm * .pdf

    Wenn Sie rm mit Platzhaltern (*) und regulären Erweiterungen verwenden, ist es eine gute Idee, die Dateien mit dem Befehl ls aufzulisten, damit Sie sehen können, welche Dateien entfernt werden, bevor Sie den Befehl rm ausführen.

  • Verwenden Sie die Option -i, um jede Datei vor dem Löschen zu bestätigen:

    rm -i Dateiname(n)

  • Um Dateien ohne Aufforderung zu löschen, selbst wenn die Dateien schreibgeschützt sind, verwenden Sie den Parameter -f (force):

    rm -f Dateiname(n)

  • Sie können auch rm-Optionen kombinieren. Um beispielsweise alle TXT-Dateien im aktuellen Verzeichnis ohne Aufforderung im ausführlichen Modus zu löschen, verwenden Sie den folgenden Befehl:

    rm -fv * .txt

So löschen Sie Verzeichnisse (Ordner)

  • Verwenden Sie diese Option -d, um ein leeres Verzeichnis zu entfernen.

    rm -d dirname

  • Um nicht leere Verzeichnisse und alle darin enthaltenen Dateien zu entfernen, verwenden Sie die Option r (rekursiv).

    rm -r dirname

    Wenn ein Verzeichnis oder eine Datei im Verzeichnis schreibgeschützt ist, werden Sie aufgefordert, das Löschen zu bestätigen.

  • Um nicht leere Verzeichnisse und alle Dateien ohne Aufforderung zu entfernen, verwenden Sie r (rekursiv) und die Option -f.

    rm -rf dirname

  • Um mehrere Verzeichnisse gleichzeitig zu entfernen, verwenden Sie den Befehl rm gefolgt von den Verzeichnisnamen, getrennt durch ein Leerzeichen.

    rm -r dirname1 dirname2 dirname3

    Wie in Dateien können Sie auch Platzhalter (*) und reguläre Ausdrücke verwenden, um mehrere Verzeichnisse abzugleichen.

Fazit

Inzwischen sollten Sie die Verwendung des Befehls rm unter Linux gut verstehen und Dateien und Verzeichnisse sicher über die Befehlszeile löschen können.

Guten Tag, liebe Leser. Heute möchte ich über das Löschen eines Verzeichnisses in PHP sprechen. Es scheint, dass die Operation nicht schwierig ist, aber es gibt einige Nuancen. Werfen wir einen Blick auf Möglichkeiten, wie Sie dies tun können.

PHP bietet hierfür eine Funktion rmdir ()... Als Argument wird der Pfad zu dem Verzeichnis verwendet, das Sie löschen möchten. Aber, Verzeichnis muss leer sein- dies ist die Hauptbedingung (außer dass der Benutzer, von dem aus der Webserver läuft, Schreibrechte für das Verzeichnis haben muss). Wenn Dateien im Verzeichnis abgelegt werden, erhalten wir beim Aufruf der Funktion einen Fehler. Dementsprechend kommen wir zu dem Schluss, dass das Verzeichnis vor der Verwendung der Funktion rmdir () muss zuerst gereinigt werden.

Das Netzwerk empfiehlt, eine Funktion zu schreiben, die als Argument den Pfad zu dem zu löschenden Verzeichnis übergeben wird. Im Rumpf der Funktion ist es notwendig, eine Auflistung des Inhalts des Verzeichnisses zu organisieren, innerhalb derer geprüft wird, ob es sich bei der Datei um ein Verzeichnis handelt. Wenn die Datei ein Verzeichnis ist, ruft sich die Funktion unter dieser Bedingung selbst auf. Dies ist notwendig, um verschachtelte Verzeichnisse zu bereinigen, und es funktioniert auf allen Verschachtelungsebenen. Andernfalls wird die Funktion auf die Datei angewendet Verknüpfung aufheben ()- Es wurde entwickelt, um eine Datei zu löschen. Außerhalb dieser Prüfung löschen wir im letzten Schritt das Verzeichnis.

Implementierungsbeispiel:

Funktion recursiveRemoveDir ($ dir) ($ include = glob ($ dir. "/ *"); Foreach ($ enthält als $ include) (if (is_dir ($ include)) (recursiveRemoveDir ($ include);) else (unlink ( $ include);)) rmdir ($ dir);) // Entferne das tmp-Verzeichnis aus dem aktuellen Verzeichnis recursiveRemoveDir ("tmp");
Was sind die Probleme mit diesem Code?

In einfachen Fällen wird das Verzeichnis mit allen Anhängen gelöscht. Aber nehmen wir an, wir haben eine versteckte Datei in unserem Verzeichnis, die zum Beispiel mit einem Punkt beginnt .htaccess... Funktion globus () ist eine UNIX-Glob-Ersetzung, die standardmäßig keine versteckten Dateien (DOTFILES) enthält. Wenn wir zum Beispiel zum Nix-Terminal gehen und bash verwenden, werden wir vor dem gleichen Problem stehen (wir sprechen über versteckte Dateien innerhalb des Globs). Um das Problem in bash zu lösen, gibt es einen Befehl shopt -s dotglob- es ermöglicht die Ersetzung von Globs versteckte Dateien... In PHP kann dies durch Hinzufügen eines zusätzlichen Parameters gelöst werden GLOB_BRACE Pro globus () und Erweitern des Musters aus dem ersten Parameter der Funktion.

$ enthält = glob ("tmp /(,.)*", GLOB_BRACE);
Und hier gibt es auch ein Problem - wir werden mit einer Endlosschleife konfrontiert, da Werte in das Array eingehen. und .. - was ist das aktuelle und das übergeordnete Verzeichnis auf Systemebene. Wir werden zu einer Endlosschleife kommen (und nicht alle übergeordneten Verzeichnisse löschen), weil. im Rahmen der Sortierung wird standardmäßig das generierte Array das erste .. sein - dh jedes Mal, wenn wir auf dasselbe Verzeichnis verweisen. Um das Problem zu lösen, bilden wir ein Array aus den Daten der Systemverzeichnisse und entfernen in einer Schleife deren Indizes aus dem Hauptarray. Es gibt auch das Problem der symbolischen Verbindungen. Angenommen, das zu löschende Verzeichnis enthält einen Link zu einem anderen Verzeichnis, dessen Inhalt wir absolut nicht löschen wollen. Um das Problem zu lösen, muss vor dem Erstellen einer Rekursion eine Überprüfung organisiert werden, dass die Entität keine Referenz ist.

Als Ergebnis nimmt die Funktion die folgende Form an:

Funktion recursiveRemoveDir ($ dir) ($ include = glob ($ dir. "/(,.)*", GLOB_BRACE); $ systemDots = preg_grep ("/\.+$/", $ include); foreach ($ systemDots as $ index => $ dot) (unset ($ enthält [$ index]);) foreach ($ enthält als $ include) (if (is_dir ($ include) &&! is_link ($ include)) (recursiveRemoveDir ($ include); ) else (unlink ($ include);)) rmdir ($ dir);) // Entferne das tmp-Verzeichnis aus dem aktuellen Verzeichnis recursiveRemoveDir ("tmp");
Der Code funktioniert, aber tatsächlich könnte er einfacher gemacht werden. PHP hat eine FilesystemIterator-Klasse, die standardmäßig bereits die von uns benötigten Einstellungen enthält. Der Pfad zum Verzeichnis, dessen Auflistung wir benötigen, wird an den Konstruktor übergeben. Wir müssen nur ein Objekt erstellen.

Funktion recursiveRemoveDir ($ dir) ($ include = new FilesystemIterator ($ dir); foreach ($ enthält als $ include) (if (is_dir ($ include) &&! Is_link ($ include)) (recursiveRemoveDir ($ include);) else (unlink ($ include);)) rmdir ($ dir);) // Entferne das tmp-Verzeichnis aus dem aktuellen Verzeichnis recursiveRemoveDir ("tmp");
Abschließend möchte ich noch eines anmerken schneller Weg... Die Richtigkeit der Verwendung ist sehr zweifelhaft - senden Sie den Befehl zur Ausführung an SHELL.

System ("rm -rf tmp");
Ich mache Sie auf den hohen Speicherverbrauch aufmerksam und darauf, dass Administratoren die Nutzung solcher Funktionen auf dem Server aus Sicherheitsgründen oft verbieten.

Tags: php, rmdir, glob, rekursion