Supprimer les directorys contenant un certain file

Je veux find tous les directorys contenant un certain file, puis supprimer ces directorys. Avec

find . -name thatcertainfile -execdir pwd \;

Je reçois une list de tous les directorys que je veux supprimer, mais comment pourrais-je supprimer tous ces directorys à la volée? Notez que je veux supprimer tout le directory et pas seulement le file lui-même, où je pourrais utiliser

find . -name thatcertainfile -exec rm -r {} \;

Essayez cette command:

rm -rf $(find . -name thatcertainfile -execdir pwd \;)

Il devrait dire au rm -rf que ce qu'il devait supprimer est la sortie de votre command. Par exemple, si la sortie de votre command était /home/guest/Documents la command que je rm -rf /home/guest/Documents traduirait sur rm -rf /home/guest/Documents .

Étant donné un path d'access au file ./some/where/thatcertainfile , ./some/where/thatcertainfile le file final /thatcertainfile vous donne un path vers le directory. Lancez un shell pour pouvoir utiliser la manipulation de strings sur le path.

 find . -name thatcertainfile -exec sh -c 'rm -r "${0%/*}"' {} \; 

Sinon, utilisez zsh. Pour transformer un path en le nom du directory contenant, utilisez le modificateur d'historique :h via un qualificateur glob .

 rm -rf **/thatcertainfile(N:h) 

(Evidemment, testez-le d'abord avant de l'exécuter avec rm !)

Ce pipeline devrait faire le travail et être à l'abri des directorys avec des espaces dans leurs noms.

 find . -name thatcertainfile -print0 | xargs --null dirname -z | xargs --null rm -r 

Si quelqu'un voit un problème avec cela, je voudrais savoir.