web-dev-qa-db-fra.com

Supprimer tout type de fichier d'un répertoire et de ses enfants

J'étais sous l'impression que

rm -r *.xml

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

*.xml: No such file or directory
30
Will

La page man de RM dit:

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

Cela signifie le drapeau -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 ci-dessous est la commande:

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

Je suppose que vous voulez supprimer tout *.xml Fichiers récursivement (dans les sous-répertoires actuels et tous les sous-répertoires). Pour ce faire, utilisez find :

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

Sur une note latérale, la suppression récursive me fait peur. Sur mes jours Saner, j'ai tendance à précéder cette étape avec:

find . -name "*.xml" 

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

28
Shawn Chin

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.

3
holms

Lecture Cette réponse à la recherche de répertoires vides UNIX , je viens d'apprendre à 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 surprises.  Because -delete implies -depth, you cannot usefully use -Prune and -delete together.

Source: Man Rechercher

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

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

ZSH Globbing récursif à la rescousse!

Invoquer ZSH: zsh

Assurez-vous que vous êtes dans le dir que vous avez l'intention d'être dans: cd wherever

Liste d'abord: ls **/*.xml

Supprimer: rm **/*.xml

Je vais résister à la forte tentation de bash sur bash, et simplement pointez sur les Documents ZSH concernés sur le sujet ici .

2
mattmc3