est-il possible d'utiliser rm pour supprimer les fichiers et répertoires correspondant à un modèle de manière récursive sans utiliser d'autres commandes?
unix
maintenance
rm
user15586
la source
la source
find | grep | xargs rm
. S'il y a des fichiers avec des espaces (ou des nouvelles lignes), cela se cassera (et selon les noms de fichiers et l'emplacement des espaces) pourrait supprimer des éléments que vous n'aviez pas l'intention de supprimer.find … -print0 | xargs -0 rm
sera beaucoup plus robuste. Cela signifie cependant que vous ne pouvez pas utilisergrep
et devez utiliserfind
les prédicats de pour faire correspondre et imprimer uniquement les fichiers souhaités. le deuxième exemple de warren sera plus robuste quefind -type f -name '*~' -print0 | xargs -0 rm
."sans utiliser d'autres commandes"
Non.
la source
En utilisant Bash, avec
globstar
set, oui :Essayez-le avec, par exemple, d'
ls -1
abord, avantrm
de répertorier les fichiers que vous correspondez.Vous définissez les options par exemple
shopt -s globstar
.Alternativement, une
find
variante plus courte :ou pour GNU
find
:ou une autre alternative pour non-GNU
find
(un peu plus lent):Pour supprimer également les répertoires, comme vous le demandez: changez simplement
rm
enrm -r
dans les commandes ci-dessus et ignorez la correspondance uniquement-type f
dans lesfind
commandes.la source
J'aurais aspiré "rm -rf" où se trouve une combinaison de noms de fichiers et de modèles correspondants tels que * et? etc (par exemple todays_log_2009 ????. log). Cela commencera à partir du répertoire actuel et diminuera de manière récursive les fichiers qui correspondent à ce modèle.
la source
Si vous utilisez zsh (1) , activez "extension globale" avec
setopt extendedglob
dans .zshrc. Préfixer le motif avec '** /' supprimera alors récursivement:% rm -rf ** / <modèle>
Cependant, s'il y a beaucoup de fichiers à supprimer, vous devez recourir à find (1) avec xargs (1) ou -exec, et je recommande également de le faire dans les scripts shell.
la source