• [^] # Re: ls * |

    Posté par . En réponse à la dépêche Nouvelles versions logicielles du projet GNU avril et mai 2017. Évalué à 4.

    xargs peut faire des exécutions multiples si la ligne est trop longue, mais dans find | tar cvf, tu ne l’as pas mis. Je suppose que c’est un oubli (sinon, ça ne va pas faire grand chose...). Cela dit, moi aussi, je l’ai oublié dans mon premier exemple, qui aurait dû être ls *truc | xargs rm -rf (ATTENTION : ne pas faire pareil chez vous, c’est l’exemple erroné qui casse des trucs).

    Cela dit, tar a l’option -T qui fait le boulot sans recours à xargs et sans erreur de ligne trop longue au niveau du shell : find -type f | tar cvf fichier.tar -T -

    Il y a intérêt à mettre au moins -type f comme argument de find, sinon chaque répertoire va être inclus avec son contenu, puis son contenu va être réinclus. Cela dit, la commande n’a d’intérêt que s’il y a un autre argument à find (sinon, tar cvf fichier.tar . suffit).

    Bon, à l’essai, parallel semble fiable par rapport aux problèmes d’espaces :
    ls | parallel ls depuis un répertoire contenant un fichier avec des espaces s’en sort bien (je n’ai pas dit que cette commande avait un intérêt), alors que ls | xargs ls indique des erreurs sur les morceaux du nom de fichier avec espace (ls | xargs -d "\n" ls permet de ne pas avoir le problème).

    Du coup, parallel ça a l’air très sympa comme commande.

    « Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone