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
6 réponses
La page de manuel de rm dit:
-r, -R, --recursive
remove directories and their contents recursively
Cela signifie que l'indicateur -r
attend un répertoire.
Mais *.xml
n'est pas un répertoire.
Si vous voulez supprimer le tout .fichiers xml du répertoire courant récursivement ci-dessous est la commande:
find . -name "*.xml" -type f|xargs rm -f
Je suppose que vous voulez supprimer tous les fichiers *.xml
récursivement (dans les répertoires actuels et tous les sous-répertoires). Pour ce faire, utilisez find
:
find . -name "*.xml" -exec rm {} \;
Sur une note de côté, la suppression récursive me fait peur. Sur mes jours 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 à 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: Homme trouver
Cela signifie que vous pouvez également supprimer tous les fichiers xml récursivement comme ceci:
find . -name "*.xml" -type f -delete
Plus belle façon, bien que celle-ci soit moins supportée 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 globbing récursif à la rescousse!
Invoquer zsh:
zsh
Assurez-vous que vous êtes dans le répertoire dans lequel vous avez l'intention d'être:
cd wherever
Liste en premier:
ls **/*.xml
Supprimer:
rm **/*.xml
Je vais résister à la forte tentation de bash sur bash
, et juste pointer vers les documents zsh pertinents sur le sujet ici.
Un moyen facile de le faire est
Rm-f *.xml
Cela supprimera tout .fichiers xml du répertoire courant.