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
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
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.
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.
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
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 .