Wie entferne ich alle Dateien in einem Verzeichnis?


76

Ich versuche, alle Dateien und Unterverzeichnisse in einem Verzeichnis zu entfernen. Früher habe ich rm -ralle Dateien entfernt, aber ich möchte alle Dateien und Unterverzeichnisse mit Ausnahme des obersten Verzeichnisses selbst entfernen .

Zum Beispiel habe ich ein Top-Verzeichnis wie images. Es enthält die Dateien header.png, footer.pngund ein Unterverzeichnis.

Jetzt möchte ich löschen header.png, footer.pngund das Unterverzeichnis, aber nicht images.

Wie kann ich das unter Linux machen?


1
cd ins verzeichnis und mache eine rm -Rfvon allen dateien und verzeichnissen dort.
— Noufal Ibrahim

Antworten:


59

Wenn Ihr oberstes Verzeichnis aufgerufen wird images, führen Sie es aus rm -r images/*. Hierbei wird der Shell-Glob-Operator verwendet *, um rm -rin jeder Datei oder jedem Verzeichnis in dieser Datei ausgeführt zu werden images.


30
versteckte Datei wird nicht gelöscht.
— Reto

50

Um versteckte Dateien zu löschen, müssen Sie Folgendes angeben:

rm -r images/* images/.*

Bei Shells, deren Globs .und enthalten .., führt dies zu einem Fehler wie

rm: cannot remove `.' directory `images/.'
rm: cannot remove `..' directory `images/..'

aber es werden versteckte Dateien gelöscht.

Ein Ansatz ohne Fehlermeldung besteht darin, find / delete mit mindepth zu verwenden. Das ist Gnu-find.

find images -mindepth 1 -delete

Ihrem Fund fehlt möglicherweise das Prädikat -mindepthoder -delete. In diesem Fall können Sie Folgendes tun:

find images/. ! -name . -prune -exec rm -rf {} +

Mein Vorschlag war die Verwendung von 'rm -r images /.*', die mit 'images / ..', aber nicht mit 'images /../ ..' übereinstimmen würden. Die Rekursion kann nicht aufwärts gehen, da 'images /../ images / ..' wieder dasselbe Verzeichnis ist.
— Benutzer unbekannt

4
@DarkHeart rm .*löscht nicht .oder ..und hat es seit mindestens 1994 für die GNU-Utils und wahrscheinlich seit Ende der 70er Jahre für UNIX nicht mehr getan . Es ist äußerst unwahrscheinlich, dass Sie ein System finden, bei dem rm .*das Dateisystem außerhalb eines Museums nach oben durchquert wird.
— terdon

21

Um alle Dateien und Verzeichnisse (einschließlich der ausgeblendeten ) in einem Verzeichnis zu löschen , können Sie Folgendes versuchen:

  • Verwenden Sie ls -Ab, um alle Dateien / Verzeichnisse abzugleichen

    cd dir_name && rm -rf `ls -Ab`
    
  • Verwenden Sie find, um alle Dateien / Verzeichnisse abzugleichen

    find dir_name -mindepth 1 -delete
    

    oder, wenn Ihr findnicht unterstützt -delete:

    find dir_name -mindepth 1 -exec rm -rf {}
    
  • Löschen Sie den Ordner und erstellen Sie ihn neu

    rm -rf dir_name && mkdir dir_name
    
  • in bash,

    shopt -s dotglob  
    rm -rf dir_name/*
    

Beachten Sie, dass der Befehl like rm -rf *nicht sicher ist, wenn Sie keine Kenntnisse über Dateien in einem Verzeichnis haben, da eine Datei, die mit -(Bindestrich) beginnt, als rmFlag interpretiert wird ...
— VasyaNovikov

1
BEARBEITEN: um es sicher zu machen, verwenden Sierm -rf ./* ./.*
— VasyaNovikov

9

Um alle regulären Dateien innerhalb eines Verzeichnisses rekursiv zu löschen , reicht dieser Befehl (unter der Annahme von GNU oder FreeBSD find) aus:

find . -type f -delete

So bleiben alle nicht regulären Dateien wie Symlinks (egal ob sie auf reguläre Dateien verweisen oder nicht), Verzeichnisse, Fifos, Sockets, Geräte ...

Siehe auch:

find . ! -type d -delete

Dateien aller Art außer dem Verzeichnis löschen .


6

Versuchen Sie diese Version:

 rm -r test/*

1
Dies entfernt keine versteckten Dateien (die mit "." Beginnen).
— gbmhunter

3

Ich benutze findBefehl hier:

Schritt 1: Finde alle Dateien und lösche sie:

find /path/to/directory/ -type f -exec rm {} \;

Beispiel:

find /home/user/Desktop/images/ -type f -exec rm {} \;

Schritt 2: Finde alle Unterverzeichnisse und lösche sie:

find /path/to/directory/ -type d -exec rm -R {} \;

find /path/to/directory/ -type dIncludes .so löscht das Verzeichnis selbst. Sie müssen auch den -mindepthSchalter verwenden, wie andere gesagt haben.
— Arthur Tacca

3

Die Frage war, ein Verzeichnis zu leeren = den Inhalt eines Verzeichnisses einschließlich versteckter Dateien zu entfernen, nicht jedoch das Verzeichnis selbst. Der find-Befehl mit -mindepth 1 ist eigentlich der richtige Weg, aber um Fehlermeldungen zu vermeiden, muss er mit -maxdepth 1 verknüpft werden:

find /path/to/dir -mindepth 1 -maxdepth 1 -exec rm -rf '{}' \;

0

Die Syntax von rm lautet:

rm [OPTION]... FILE...

Sie müssen also den entsprechenden Pfad explizit angeben, z

rm -r sub_dir/

0

Sie können das Verzeichnis mit dem folgenden Befehl entfernen:

sudo rm -r directoryname1/2/3/*

Nach 3 / * wird das gesamte Verzeichnis gelöscht.

Beispiel sudo rm -r Downloads / song / *

Es werden alle darin enthaltenen Dateien gelöscht Downloads/song.


0

Das funktioniert bei mir perfekt, getestet haben sich mehrere Variationen jedes Mal bewährt.

Aus dem Verzeichnis, in dem sich das Bilderverzeichnis befindet.

rm -frd ./images/*

Vor:

images/
    |_ header.png
    |_ footer.png
    |_ subdir/

nach:

images/

Ich bin mir nicht sicher, ob dies in der ursprünglichen Frage klargestellt wurde, aber nur um darauf hinzuweisen, dass, wenn Sie dotglob nicht aktivieren, "dot-file" oder "dot-directory" unter images ( mkdir images/.somedir; touch images/.somefile)
— Jeff Schaller

0

So löschen Sie alle Dateien und Unterverzeichnisse im aktuellen Verzeichnis, einschließlich der ausgeblendeten, ohne Fehlermeldung :

rm -rf .[^.] .??* *

Oder aus dem übergeordneten Verzeichnis:

rm -rf images/.[^.] images/.??* images/*

Von https://serverfault.com/a/47940/269538 .



-2

Löschen Sie den Ordner "test" und alle darin enthaltenen Dateien:

 rm -r test

Löschen Sie alle darin enthaltenen Dateien, aber behalten Sie den Ordner "test" bei:

 rm -r test/*

-4

cd in den Ordner und führe dann den folgenden Befehl aus:

ls |xargs rm -rf

2
Dies schlägt bei Dateinamen fehl, die Leerzeichen enthalten. Ich würde davon abraten, die Ausgabe von ls als Eingabe für andere Befehle zu verwenden, da dies im Allgemeinen unsicher ist.
— Dhag
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.