Considérez cette commande:
ls /mydir/*.txt | xargs chown root
L'intention est de changer les propriétaires de tous les fichiers texte en mydirroot
Le problème est que s'il n'y a pas de .txtfichiers, mydirxargs génère une erreur indiquant qu'aucun chemin n'est spécifié. Ceci est un exemple inoffensif car une erreur est générée, mais dans certains cas, comme dans le script que je dois utiliser ici, un chemin vide est supposé être le répertoire actuel. Donc, si j'exécute cette commande à partir de /home/tom/là, s'il n'y a pas de résultat pour ls /mydir/*.txtet que tous les fichiers sous /home/tom/ont leurs propriétaires changés en root.
Alors, comment puis-je faire ignorer un résultat vide par xargs?
git branch --merged | grep -v '^* ' | xargs git branch -d, qui échoue également sur une entrée vide
lspour une utilisation programmatique; voir mywiki.wooledge.org/ParsingLs