J'essaye de faire quelque chose comme
ls -t | head -n 3 | xargs -I {} tar -cf t.tar {}
pour archiver les 3 derniers fichiers modifiés mais il finit par exécuter la commande tar séparément pour chacun des fichiers et à la fin je me retrouve avec un fichier tar contenant le dernier des 3 fichiers (dans leur ordre). Je sais que je n'utilise pas correctement 'xargs' mais la recherche n'a pas aidé; Je trouve des exemples qui ne fonctionnent pas non plus. Même la commande la plus simple
ls | xargs -I {} tar -cf t.tar {}
se retrouve avec un fichier tar qui ne contient qu'un seul des fichiers de ce répertoire.
-I
indicateur, vous devez utiliser autre chose que{}
pour la chaîne de remplacement. Par exemplels -t | head -n 3 | xargs -I foo tar -cf t.tar foo
-I
implique-L 1
ce qui signifie effectivement exécuter la commande suivante pour chaque 1 ligne d'entrée, c'est pourquoi vous voyez les résultats que vous êtes.Selon cet article , il est préférable d'utiliser
r
au lieu dec
, dans le cas oùxargs
les entrées sont coupées, produire un fichier tar contenant uniquement le dernier morceau. Une meilleure solution serait donc:la source