2009-01-08 10 views
1

J'utilise la commande suivante pour supprimer tous les répertoires « .dummy » dans un dossier nommé « Test dossier »:Suppression des répertoires avec des espaces avec bash

rm -rf `find "Test Folder" -type d -name .dummy` 

Cependant, cela ne fonctionne pas car il se développe pour, par exemple:

rm -rf Test Folder/.dummy 

Étant donné que l'espace n'est pas échappé, cela échoue.

J'ai aussi essayé quelque chose comme ceci:

find "Test Folder" -type d -name .dummy -exec rm -rf {} \; 

Il fonctionne, mais il donne une erreur ennuyeux comme ceci:

find: Test Folder/.dummy: No such file or directory 

Y at-il un moyen de faire soit la solution pour réussir?

Répondre

9

Un couple de choses. Le plus facile est de changer et utiliser

$ find 'Test Folder' -type d -print0 | xargs -0 rm -rf 

Un autre choix est

$ find 'Test Folder' -type d -exec \'{}\' \; 
+0

ajoutez '-depth' à la commande' find' ou si vous avez 'path/.dummy/path/.dummy' vous obtiendrez des erreurs. –

+0

Charlie, il semblerait que votre commande supprimera l'intégralité de "Test Folder" et pas seulement ses sous-répertoires ".dummy /" (manquant le '-name .dummy') –

2

Essayez

find "Test Folder" -type d -name .dummy -exec rm -rf \"{}\" \; 

Notez les guillemets supplémentaires dans le rm -rf "{}" arg l'option -exec. Ils sont obligatoires car le nom Test Folder/.dummy contient un espace. Donc, vous avez besoin de citations.

+0

-ce que les citations supplémentaires réellement nécessaires? Je n'étais pas sûr qu'ils l'étaient. –

+0

vous voulez \ échapper les guillemets au {} - sinon ils sont mangés par l'interpréteur de ligne de commande du shell. –

1

trouver "Test Folder" -type d -name '.dummy' -delete

Questions connexes