2015-10-07 3 views
0

J'ai environ 10 dossiers et j'essaie de ne garder que quelques sous-dossiers et de supprimer le reste.Comment conserver certains dossiers et supprimer le reste sous Unix

Exemple: Je

 
A/1 
A/2 
A/3 
A/4 

B/1 
B/4 
B/5 
B/6 

J'essaie de ne garder que le dossier 1 et 4 dans chaque dossier parent A et B. J'utilise find -type d -name 2 -exec rm -rf {} \; pour trouver et supprimer chaque dossier.

Existe-t-il une commande unix pour conserver les dossiers 1 et 4 et supprimer le reste?

Répondre

1

Dites exactement ce que vous cherchez; En excluant les répertoires 1 et 4, au niveau de l'enfant, trouvez les autres répertoires et supprimez-les à l'exception des répertoires 1 et 4.

+0

J'ai essayé cette commande pour vérifier et elle ne retourne rien. trouver. -mindepth 2 -type d -name "[^ 14]" -print – Roger

+0

Très étrange. Sur mon installation, j'obtiens les résultats exacts que vous avez demandés. Sauf si vos répertoires ne sont pas numériques ... – AlG

0

Je crois que cela fonctionne pour les systèmes compatibles POSIX:

find . -type d -links 2 \! \(\(-name 1 \) -o \(-name 4 \) \) -exec rm -rf {} \; 

Cela ne comprend que les répertoires enfants et exclut les répertoires nommés 1 ou 4.

1

l'idée d'AIG à exclure est probablement correct, mais la façon d'exclure avec find est avec l'opérateur -o (ou) qui arrête si ce qui est venu avant est vrai et continue autrement:

find . -mindepth 2 -type d -name 1 -o -name 4 -o -exec rm -rf {} + 
0

en utilisant simplement glob

$ rm -rf [AB]/[^14]