supprimer tout un type de fichier d’un répertoire et de ses enfants

J’avais l’impression que

rm -r *.xml 

supprimerait tous les fichiers du parent et de l’enfant, cependant:

 *.xml: No such file or directory 

La page de manuel de rm dit:

  -r, -R, --recursive remove directories and their contents recursively 

Cela signifie que le flag -r attend un répertoire. Mais *.xml n’est pas un répertoire.

Si vous souhaitez supprimer tous les fichiers .xml du répertoire actuel de manière récursive, voici la commande:

 find . -name "*.xml" -type f|xargs rm -f 

Je suppose que vous voulez supprimer tous *.xml fichiers *.xml manière récursive (dans tous les sous-répertoires). Pour ce faire, utilisez find :

 find . -name "*.xml" -exec rm {} \; 

Sur un côté, la suppression récursive me fait peur. Les jours les plus sains, j’ai tendance à précéder cette étape avec:

 find . -name "*.xml" 

(sans le bit -exec ) juste pour voir ce qui pourrait être supprimé avant de faire le saut. Je vous conseille de faire la même chose. Vos fichiers vous remercieront.

En lisant cette réponse sur la recherche de répertoires vides sous unix , je viens d’apprendre sur l’action -delete:

 -delete Delete files; true if removal succeeded. If the removal failed, an error message is issued. If -delete fails, find's exit status will be nonzero (when it even‐ tually exits). Use of -delete automatically turns on the -depth option. Warnings: Don't forget that the find command line is evaluated as an expression, so putting -delete first will make find try to delete everything below the start‐ ing points you specified. When testing a find command line that you later intend to use with -delete, you should explicitly specify -depth in order to avoid later sursockets. Because -delete implies -depth, you cannot usefully use -prune and -delete together. 

Source: homme trouver

Cela signifie que vous pouvez également supprimer tous les fichiers XML de manière récursive comme ceci:

 find . -name "*.xml" -type f -delete 

plus belle façon, bien que celle-ci soit moins prise en charge dans les systèmes unix:

 rm -rf */*.xml 

Cela supprimera les fichiers xml de tous les sous-répertoires de votre répertoire actuel.

ZSH récursive globbing à la rescousse!

Invoquer zsh: zsh

Assurez-vous d’être dans le répertoire où vous avez l’intention d’être

Liste en premier: ls **/*.xml

Supprimer: rm **/*.xml

Je vais résister à la forte tentation de bash bash , et juste pointer vers les docs zsh pertinents sur le sujet ici .

Un moyen facile de faire est

rm -f * .xml

Cela supprimera tous les fichiers .xml du répertoire actuel.