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?

Poorani
quelle
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.


quelle
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 {} +
Benutzer unbekannt
quelle
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/*
    
zeekvfu
quelle
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 .

amit singh
quelle
6

Versuchen Sie diese Version:

 rm -r test/*
demas
quelle
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 {} \;
Mandar Shinde
quelle
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 '{}' \;
Maddes
quelle
0

Die Syntax von rm lautet:

rm [OPTION]... FILE...

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

rm -r sub_dir/
Zaur Nasibov
quelle
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.

Dharmendra Rajput
quelle
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/
Deb-Linux-Benutzer
quelle
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 .

diese
quelle
-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/*
Mike22LFC
quelle
-4

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

ls |xargs rm -rf
Sean
quelle
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