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.