Почему xargs -L дает правильный формат, а xargs -n - нет? - PullRequest
6 голосов
/ 30 июня 2011

Примите во внимание следующее:

$ 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

Почему опция -n дает неправильное форматирование?На всякий случай я использую bash под Ubuntu.Спасибо.

Ответы [ 2 ]

14 голосов
/ 30 июня 2011

-L разбивается по строкам; echo выводит не выводимые строки, а пробелы, поэтому запускается один ls -l, который форматирует все столбцы как группу.

-n разбивается по параметрам; в отсутствие -L или -0 разделителем является пробел (возможно, измененный в кавычках), поэтому каждое имя файла получает свой собственный ls -l прогон, и независимые прогоны не могут координировать ширину столбцов.

3 голосов
/ 30 июня 2011

Стандарт POSIX мандаты :

-L число

Утилита должна выполняться для каждого непустого number строк аргументов из стандартного ввода.Последний вызов утилиты должен быть с меньшим количеством строк аргументов, если осталось меньше числа. строка считается заканчивающейся первым, если последний символ строки не является <blank>;завершающий <blank> сигнализирует о продолжении следующей непустой строки включительно.

-n number

Вызывает утилиту, используя столько стандартных входных аргументов насколько возможно, до число (положительное десятичное целое число) максимум аргументов.

(выделение добавлено). Поскольку echo * создает одну строку, xargs -L 1просто передает все имена файлов одновременно на ls, и только тогда ls может правильно выровнять столбцы.

(Другими словами, ваша первая команда эквивалентна ls -l index.html*, за исключением того, что она не 't правильно обрабатывать имена файлов, содержащие пробелы.)

...