8
votes

Pourquoi Xargs -l donne-t-il le bon format, tandis que Xargs -N ne pas?

Considérez les points suivants:

$ echo index.html* | xargs -L 1 ls -l
-rw-r--r-- 1 zeki zeki  17198 2011-05-03 23:18 index.html
-rw-r--r-- 1 zeki zeki  17198 2011-05-03 23:20 index.html.1
-rw-r--r-- 1 zeki zeki  17198 2011-05-03 23:21 index.html.2
-rw-r--r-- 1 zeki zeki 146589 2011-05-05 12:29 index.html.3
$ echo index.html* | xargs -n 1 ls -l
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:18 index.html
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:20 index.html.1
-rw-r--r-- 1 zeki zeki 17198 2011-05-03 23:21 index.html.2
-rw-r--r-- 1 zeki zeki 146589 2011-05-05 12:29 index.html.3


0 commentaires

3 Réponses :


15
votes

-l divise par des lignes; echo ne séparait pas sa sortie par des lignes mais par des espaces, un seul ls -l est exécuté et qui formate toutes les colonnes en tant que groupe.

-n divise par les paramètres; En l'absence de -l ou -0 , le séparateur est espagnol (éventuellement modifié en citant), chaque nom de fichier obtient donc son propre ls -l Courez et il n'y a aucun moyen pour les courses indépendantes de coordonner les largeurs de colonne.


0 commentaires

3
votes

La norme POSIX Mandats :

-l numéro

L'utilitaire doit être exécuté pour chaque numéro non vide lignes d'arguments à partir d'une entrée standard. La dernière invocation de l'utilité doit être avec moins de lignes d'arguments si moins de nombre ne reste pas. Une ligne est considérée comme terminée avec le premier sauf si le dernier caractère de la ligne est un ; Un Signals continue à la ligne suivante non vide, inclusive.

-n numéro

Invoquer l'utilitaire en utilisant autant d'entrées standard arguments que possible, jusqu'à numéro (un entier décimal positif), maximum.

(emphase ajoutée.) Etant donné que echo * produit une seule ligne, xargs -l 1 vient de nourrir tous les noms de fichiers à ls une fois, et seulement alors que ce soit ls aligner bien les colonnes.

(En d'autres termes, votre première commande est équivalente ls -l index.html * , sauf qu'il ne gère pas les noms de fichiers contenant des blancs correctement.)


0 commentaires

1
votes

Exemple annulable minimal de la manière dont -l divise par lignes et -n par blanchiment

Ceci devrait clarifier ce que GoSekosaur a déclaré En outre: xxx

divise par ligne et est donc équivalent à: xxx

sorties: xxx

Toutefois: xxx

scissure Toute personne blanche, et est donc équivalente à: xxx

et produit à la place: xxx

portabilité

comme mentionné sur https://unix.stackexchange.com/questions/448290/are-l1-and-n-1-the-same-for-xargs/448379#448379 -L est légèrement moins portable car il s'agit d'une extension XSI POSIX, tandis que -n n'est pas.


0 commentaires