J'essaie d'écrire une commande bash qui supprimera tous les fichiers correspondant à un modèle spécifique - dans ce cas, ce sont tous les anciens fichiers journaux VMware qui ont construit.
J'ai essayé cette commande: < / p> Cependant, lorsque j'exécute la commande, il étouffe tous les dossiers qui ont des espaces dans leurs noms. Existe-t-il un moyen de formater le chemin de fichier pour que Xargs le transmet à RM cité ou correctement échappé? P> p>
7 Réponses :
Consultez le drapeau -0 code> pour
xargs code>; combiné avec
trouver code> 's
-print0 code> Vous devez être défini.
find . -name vmware-*.log -print0 | xargs -0 rm
Essayez d'utiliser:
find . -name vmware-*.log -print0 | xargs -0 rm
Ne pas utiliser Xargs. Trouver peut le faire sans aide: p>
trouver. -Name "VMware - *. LOG" -EXEC RM '{}' \; CODE> P>
Il est toujours bon d'éviter de commencer un processus supplémentaire, en particulier quelque chose comme ça où vous pourriez fournir quelque chose de trop long à Xargs. Notez que Recherche code> a une action code> Supprimer code> Action que vous pouvez utiliser au lieu du
-exec ... code> - mais il est plus facile de personnaliser de cette façon. Vous n'avez pas non plus à citer les accolades frisées, à moins que vous n'utilisiez une vieille coquille comme TCSH.
Mais cela lancera un processus RM code> pour chaque fichier individuellement, au lieu de passer plusieurs noms de fichiers à
RM code> comme
xargs code> fait, donc ça va être plus lent. .
@JK: C'est la raison pour laquelle la nouvelle Les implémentations code> ont
Rechercher -exec rm '{}' + code>, qui lottera des arguments libéraux comme
xargs code>.
@JK: Vous avez raison sur les processus. Quant à la vitesse, il y a toujours des exceptions, mais dans mon expérience, ce n'est pas le processus de traitement de la RM qui domine. Si vous supprimez suffisamment de fichiers que l'heure RM gagne, c'est l'activité de disque réelle qui vous tiendrai. Sinon, c'est le moment de la recherche qui compte de toute façon (penser 5 correspond à 10000 fichiers).
@Efement: Bon appel. Je l'oublierais totalement!
@Efement: Merci, je ne savais pas à ce sujet!
gnu trouve
trouver. -Name VMware - *. Connexion | xargs -i rm -rf {} code> p>
find -iname pattern use -iname for pattern search
Pour éviter le problème de l'espace dans Xargs, j'utiliserais un nouveau caractère de ligne en tant que séparateur avec option -D:
Cross posté: serverfault.com/questions/76031/...