Der rm-Befehl wird unter Linux zum Löschen von Dateien und Verzeichnissen verwendet. Es kann verwendet werden, um einige Dateien zu löschen, indem jeder Dateiname angegeben wird, oder es kann mit dem -r
verwendet werden Argument (rekursiv ), um ein Verzeichnis und die gesamte darunter liegende Verzeichnisbaumstruktur zu löschen.
Die für den rm-Befehl zu verwendende Syntax ist:
$ rm <file1> <file2> ... <fileN> $ rm -r <directory1> <directory2> ... <directoryN> <target_directory>
Dateien und Verzeichnisse unter Linux löschen
Diese Syntaxen können auch kombiniert werden, um Dateien und Verzeichnisse auf einmal zu löschen:
$ rm -r file1 file2 file3 directory1 directory2
Sie können Datei- und Verzeichnisnamen auch mit Platzhaltern angeben, wenn die Namen ähnlich sind, d. h. beginnen, enden oder das gleiche Muster in ihrem Namen enthalten. Dies ist besonders nützlich, wenn eine große Anzahl von Dateien mit derselben Dateierweiterung entfernt werden soll.
Um beispielsweise alle Dateien zu löschen, deren Dateiname mit der Zeichenfolge „Datei beginnt ‘, können wir ausführen:
$ rm file*
Ebenso, um alle Dateien mit der Erweiterung '.txt'
zu löschen , können wir ausführen:
$ rm *.txt
Was die Platzhalter im Grunde tun, ist Folgendes:Platzieren Sie alle Dateien oder Verzeichnisse, die das Platzhaltermuster erfüllen, als Argumente für rm . Daher gibt es theoretisch keine Begrenzung der Anzahl der Argumente für rm Befehl.
Löschen einer großen Anzahl von Dateien:Fehler „Argumentliste zu lang“
Auch wenn theoretisch „rm ’ Es gibt keine Begrenzung der Anzahl der Argumente, es gibt eine vordefinierte Begrenzung der maximalen Anzahl der Argumente, mit denen ein einzelner Befehl arbeiten kann.
Dies ist eine im Linux-System definierte Grenze und basiert auf der Stapelgröße des Systems. Wenn also ein Platzhaltermuster Zehntausende von Dateien oder Verzeichnissen als Argumente platziert, gibt das Programm einen Fehler aus:„Argument list too long “.
Nehmen wir ein Beispiel für einen Ordner, der ungefähr 2,5 Lacs enthält (250.000 ) Dateien.
$ ls -l | wc -l $ ls | head
Versuchen wir, sie mit einem Platzhalter zu entfernen.
$ rm file*
Somit ergibt sich der oben genannte Fehler. Sehen wir uns nun an, wie wir diesen Fehler beheben können.
Lösung:Verwenden Sie den Suchbefehl mit dem Argument „-exec“, um Tausende von Dateien zu löschen
Der find-Befehl sucht grundsätzlich nach Dateien in Verzeichnissen basierend auf verschiedenen Parametern, wie Dateinamensmuster, Dateierweiterung usw.
Dann verwenden wir den '-exec'
Parameter von ‘find‘ wodurch Sie jeden Befehl über die Ausgabe von find ausführen können .
$ find . -maxdepth 1 -name "<filename_pattern>" -exec rm -r {} \;
Hier das erste Argument, '.'
(aktuelles Verzeichnis) ist das Verzeichnis, in dem die Dateien zu finden sind. Wenn Dateien aus einem anderen Verzeichnis entfernt werden sollen, müssen Sie hier den Pfad zu diesem Verzeichnis angeben.
Das Argument '-maxdepth 1'
berücksichtigt nur die Dateien und Verzeichnisse im aktuellen Verzeichnis. Ohne diese Tiefe anzugeben, wird der Suchbefehl durchsucht unnötigerweise alle Unterverzeichnisse.
Das Argument "-name"
wird verwendet, um Dateien und Verzeichnisse mit einem Zeichenfolgenmuster zu finden. Das 'filename_pattern ’ gibt das Zeichenfolgenmuster an. Dann geben wir den ‘rm -r‘
an Befehl nach einem Argument '-exec'
.
Die offenen Klammern '{ }'
sind ein Platzhalter für das zu verwendende Argument aus der Ausgabe von find.
$ find . -maxdepth 1 -name "file*" -exec rm -r {} \;
Wie wir sehen können, wurden alle Dateien gelöscht. Der gleiche Befehl kann verwendet werden, um Verzeichnisse in großen Mengen zu löschen, da wir bereits den '-r'
übergeben Argument.
Schlussfolgerung
In diesem Artikel haben wir etwas über den Befehl rm command gelernt und wie das Problem „Argumentliste zu lang ’ kann mit ‘rm’ behandelt werden kombiniert mit dem ‘finden ‘ Befehl.
Wenn Sie Feedback oder Fragen haben, teilen Sie uns dies in den Kommentaren unten mit!