Supposons que je souhaite supprimer tous les fichiers d'un dossier dont la taille est supérieure à 1 Mo.
$ find . -size +1M | xargs -0 rm
Cela ne supprimera pas les fichiers qui ont de l'espace dans leurs noms. Je veux donc qu'il cite tous les arguments qu'il envoie rm
. Si le find
donne, Some report.docx
il devrait passer "Some report.docx"
à rm
.
Comment puis je faire ça?
xargs
. Aussi comme le suggère le wiki, n'utilisez pasxargs
sans passer-print0
àfind
.xargs -d$'\n'
pour limiter le délimiteur à seulement de nouvelles lignes (et non des espaces; cela ne traiterait pas spécialement les guillemets, etc. - j'ai vérifié sur un système GNU) - la réponse donnée dans stackoverflow.com/a/33528111/94687Réponses:
Utilisation simple:
Si vous insistez pour utiliser
xargs
etrm
avecfind
, ajoutez simplement-print0
votre commande:Autre moyen:
De
man find
:la source
"Some report.docx"
àrm
, sauf si le nom de fichier contient les guillemets. Ce que vous voulez, c'est passerSome report.docx
sans être inquiétérm
. La réponse de KasiyA (maintenant) montre la manière générale de le faire avecfind
. [KasiyA: désolé pour le mauvais ping plus tôt.]$0
et$1
etc.xargs -0
au lieu dexargs -r0
.Option
-0
dexargs
signifie que la sortie du tuyau est interprétée comme des éléments terminés par des valeurs nulles. Dans ce cas, vous devez également créer une entrée pour le tuyau avecfind ... -print0
.la source
J'avais une exigence similaire et j'ai fini par utiliser le
-I
commutateur pour avoir un espace réservé et j'ai pu le citer.la source