2011-06-29 12 views
5

Rozważmy następujący:Dlaczego xargs -L daje właściwy format, a xargs -n nie?

$ 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 

Dlaczego opcja -n uzyskując niepoprawne formatowanie? Na wszelki wypadek używam bash pod Ubuntu. Dzięki.

Odpowiedz

12

-L dzieli się liniami; echo nie oddziela danych wyjściowych od linii, ale spacjami, dlatego uruchamiany jest pojedynczy ls -l, który formatuje wszystkie kolumny jako grupę.

-n dzieli według parametrów; pod nieobecność -L lub -0 separatorem jest biała spacja (ewentualnie zmodyfikowana przez cytowanie), więc każda nazwa pliku otrzymuje swój własny przebieg ls -l i nie ma sposobu, aby niezależne przebiegi skoordynowały szerokość kolumn.

+0

mnie uprzedził, +1. –

+0

Dzięki! Teraz jest jasne. –

3

standardem POSIX mandates:

-Lliczba

Narzędzie powinno być wykonywane dla każdego niepuste numberlinii argumentów ze standardowego wejścia. Ostatnia inwokacja użyteczności ma mniejszą liczbę argumentów, jeśli pozostanie mniej niż liczba. Linia linia jest uważana za kończącą się pierwszą, chyba że ostatnim znakiem linii jest <blank>; ciąg dalszy <blank> sygnalizuje kontynuację do następnej niepustej linii włącznie.

-nliczba

narzędzie Wywołanie stosując jako standardowe wejście wiele argumentów jak to możliwe, do liczby (pozytywny dziesiętnych liczby całkowitej) maksymalnie argumenty.

(podkreślenie dodane). Ponieważ echo * produkuje pojedynczą linię, xargs -L 1 tylko zasila wszystkie nazwy plików do ls od razu, a dopiero potem można ls ładnie wyrównać kolumny.

(Innymi słowy, pierwsze polecenie jest równoważne ls -l index.html*, oprócz tego, że nie obsługuje nazw zawierających spacje prawidłowo).

+0

Dziękuję też !! –