bash - supprime tous les répertoires (et contenus) mais pas les fichiers dans pwd

19

Je voudrais supprimer tous les répertoires du pwd mais laisser les fichiers dans le pwd seuls. Si le contenu de mon pwd est:

mydir1
mydir2
myfile1
myfile2

alors je voudrais rester avec juste

myfile1
myfile2

Je suppose que je dois utiliser rm -r -i

Ai-je raison?

atomh33ls
la source

Réponses:

10

Non, cela vous donnerait "l'opérande manquant" puisque vous n'avez rien spécifié. Mettre un *invite également pour les fichiers.

Je voudrais essayer de:

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

Le mindepth 1va exclure .des résultats, le maxdepth 1va exclure d'essayer de faire sous les répertoires qui seront de toute façon supprimés (créant ainsi un avertissement). Mais dans la pratique, vous pouvez les laisser de côté si vous acceptez d'avoir quelques avertissements "innocents".

fede.evol
la source
21

J'ai trouvé celui-ci quelque part:

rm -r */

Semble la façon la plus simple d'aller. Avec votre exemple, vous devriez confirmer chaque cas, si vous avez 5 fichiers, c'est OK, mais avec des structures de fichiers plus grandes, un mode interactif n'est pas la voie à suivre ... Tout comme une suggestion, s'il s'agit d'informations importantes, faites un sauvegarde ...

Martin
la source
1
Cela suivra également des liens symboliques, ce qui n'est probablement pas souhaité ici.
JdeBP
8

Utilisation

rm -rf ./*/

Cela évite le mode interactif et supprime uniquement les répertoires de votre répertoire local.

Nous voyons
la source
Comme JdeBP l'a souligné sur la réponse très similaire de Martin , si le répertoire actuel (de niveau supérieur) contient des liens symboliques vers d'autres répertoires, ils seront également supprimés (même s'ils ne sont pas dans ou subordonnés au répertoire actuel).
Scott
3

Quelque chose comme ça devrait fonctionner:

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

-type d recherche uniquement les répertoires

Matthew Williams
la source
-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
la source