Supposons que sous le répertoire actuel, il y ait plusieurs sous-répertoires, et l'un s'appelle A.
Comment supprimer tous les sous-répertoires sauf A avec Bash?
Bash a étendu le globbing (premier test, puis supprimez l'écho):
shopt -s extglob
echo rm -rf !(A)
shopt | grep ext
Vous pouvez voir si le plugin est activé.la source
Qu'en est-il de:
Cela évite une partie de la "peur" d'une faute de frappe dans les autres commandes.
la source
Quelque chose comme
devrait faire.
Éditer
Ça devrait vraiment être
pour éviter
find
de se reproduire en dessous de A.la source
Je le fais habituellement en élaborant une commande ls qui le fait bien en premier. je ne suis pas sur une machine unix, mais quelque chose comme:
ls -lda "[^ A]"
Une fois que vous avez bien compris, dirigez-le vers une commande
ls -lda "[^ A]" | xargs rm -rf
N'hésitez pas à modifier ci-dessus si j'ai une mauvaise expression régulière ...
la source
Si vous voulez être plus flexible mais manuel, vous pouvez le faire:
De cette façon, vous pouvez faire du munging général.
la source
Voici une façon. Soyez prudent avec ce genre de chose, cependant, il est si puissant qu'il ne peut être utilisé que pour le bien ou le mal ...
la source
N'utilisez pas find car certaines personnes l'ont montré avec -exec et rm sans passer par -print0 pour trouver et -0 pour xargs. Il se confondra sur les noms de fichiers avec des espaces ou des retours à la ligne:
Utilisez plutôt find -print0 avec xargs -0, '-exec command {} +' ou -delete si votre recherche le prend en charge.
la source
Voir aussi ici:
/programming/862388/delete-all-files-directories-except-two-specific-directories
la source
En plus de l'exemple précédent de:
vous pouvez aussi faire:
pour éviter d'avoir à le faire d'
cd some/subdir
abord.la source