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?

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".


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


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.


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


-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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.