bash - entferne alle Verzeichnisse (und Inhalte), aber keine Dateien in pwd

19

Ich möchte alle Verzeichnisse aus dem pwd entfernen, aber die Dateien im pwd in Ruhe lassen. Wenn der Inhalt meines pwd ist:

mydir1
mydir2
myfile1
myfile2

dann möchte ich nur noch übrig bleiben

myfile1
myfile2

Ich gehe davon aus, dass ich verwenden muss rm -r -i

Hab ich recht?

atomh33ls
quelle

Antworten:

10

Nein, das würde Ihnen einen "fehlenden Operanden" geben, da Sie nichts angegeben haben. Das Einfügen einer *würde auch zur Eingabe von Dateien auffordern.

Ich würde versuchen:

find -mindepth 1 -maxdepth 1 -type d -exec rm -r {} \;

Das mindepth 1wird .von den Ergebnissen ausgeschlossen, das maxdepth 1wird den Versuch unter den Verzeichnissen ausschließen, die ohnehin gelöscht werden (daher wird eine Warnung erstellt). In der Praxis könnten Sie beide jedoch weglassen, wenn Sie einigen "unschuldigen" Warnungen zustimmen.

fede.evol
quelle
21

Ich habe diesen irgendwo gefunden:

rm -r */

Scheint der einfachste Weg zu sein. In Ihrem Beispiel müssten Sie jeden Fall bestätigen, wenn Sie 5 Dateien haben, ist dies in Ordnung, aber bei größeren Dateistrukturen ist ein interaktiver Modus nicht der richtige Weg ... Nur als Vorschlag, wenn es sich um wichtige Informationen handelt, machen Sie eine Backup ...

Martin
quelle
1
Das folgt auch symbolischen Links, was hier sehr wahrscheinlich nicht erwünscht ist.
JdeBP
8

Verwenden

rm -rf ./*/

Dadurch wird der interaktive Modus vermieden und nur Verzeichnisse in Ihrem lokalen Verzeichnis gelöscht.

Wir sehen
quelle
Wie JdeBP in Martins sehr ähnlicher Antwort hervorhob , werden die aktuellen (obersten) Verzeichnisse, die symbolische Links zu anderen Verzeichnissen enthalten, ebenfalls gelöscht (auch wenn sie nicht im aktuellen Verzeichnis sind oder diesem untergeordnet sind).
Scott
3

So etwas sollte funktionieren:

find /path -type d -exec rm -rf '{}' \;

-Typ d sucht nur nach Verzeichnissen

Matthew Williams
quelle
-1
you can also try in this way to delete only all folders not files from any location in linux.

    #delete only all dir and don't touch files
    #!/bin/bash
    for dir in `ls -l | grep ^d | awk '{print $9}'`
    do
    echo "going to delete $dir " `rm -rf $dir`
    done
    ls
linux.cnf
quelle