1 (13.05.2010 15:29:14 отредактировано ufomen)

Всем привет,
Задался тут вопросом в каком порядке xargs передает аргументы на исполнение, обнаружил интересную штуку...

Пример:
Дан каталог с файлами и папками где 2 3 и 7 папки, остальное каталоги:

$ ls
1  10  2  3  4  5  6  7  8  9

$ ls -la
total 20
drwxr-xr-x  5 alexeyk sudo    4096 2010-05-13 13:14 .
drwxr-xr-x 12 alexeyk alexeyk 4096 2010-05-13 13:13 ..
-rw-r--r--  1 alexeyk sudo       0 2010-05-13 13:13 1
-rw-r--r--  1 alexeyk sudo       0 2010-05-13 13:14 10
drwxr-xr-x  2 alexeyk sudo    4096 2010-05-13 13:13 2
drwxr-xr-x  2 alexeyk sudo    4096 2010-05-13 13:13 3
-rw-r--r--  1 alexeyk sudo       0 2010-05-13 13:13 4
-rw-r--r--  1 alexeyk sudo       0 2010-05-13 13:14 5
-rw-r--r--  1 alexeyk sudo       0 2010-05-13 13:14 6
drwxr-xr-x  2 alexeyk sudo    4096 2010-05-13 13:13 7
-rw-r--r--  1 alexeyk sudo       0 2010-05-13 13:14 8
-rw-r--r--  1 alexeyk sudo       0 2010-05-13 13:14 9

Теперь исользуем xarg для передачи аргументов используя -t для трассировки того что мы передаем:

/testdir$ ls |xargs -t ls -la
ls -la 1 10 2 3 4 5 6 7 8 9
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:13 1
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 10
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:13 4
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 5
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 6
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 8
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 9

2:
total 8
drwxr-xr-x 2 alexeyk sudo 4096 2010-05-13 13:13 .
drwxr-xr-x 5 alexeyk sudo 4096 2010-05-13 13:14 ..

3:
total 8
drwxr-xr-x 2 alexeyk sudo 4096 2010-05-13 13:13 .
drwxr-xr-x 5 alexeyk sudo 4096 2010-05-13 13:14 ..

7:
total 8
drwxr-xr-x 2 alexeyk sudo 4096 2010-05-13 13:13 .
drwxr-xr-x 5 alexeyk sudo 4096 2010-05-13 13:14 ..



Вопрос ) Почему папки оказываются в конце? Ответ был найден довольно быстро, оказывается так работает ls -la
проверяем:
$ ls -la 1 10 2 3 4 5 6 7 8 9
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:13 1
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 10
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:13 4
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 5
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 6
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 8
-rw-r--r-- 1 alexeyk sudo    0 2010-05-13 13:14 9

2:
total 8
drwxr-xr-x 2 alexeyk sudo 4096 2010-05-13 13:13 .
drwxr-xr-x 5 alexeyk sudo 4096 2010-05-13 13:14 ..

3:
total 8
drwxr-xr-x 2 alexeyk sudo 4096 2010-05-13 13:13 .
drwxr-xr-x 5 alexeyk sudo 4096 2010-05-13 13:14 ..

7:
total 8
drwxr-xr-x 2 alexeyk sudo 4096 2010-05-13 13:13 .
drwxr-xr-x 5 alexeyk sudo 4096 2010-05-13 13:14 ..


Теперь остается другой вопрос как заставить xargs передавать аргументы по порядку? чтоб ls не смог сделать вывод в удобном ЕМУ формате  ag

2

Какое отношение тема имеет к Красношапочным дистрибутивам?

3 (13.05.2010 16:05:59 отредактировано ufomen)

Hrafn пишет:

Какое отношение тема имеет к Красношапочным дистрибутивам?

Прямое, эксперимент проводился на Centos 5.4  )

Если написал не туда прошу переместить.

Я думаю т.к. вопрос простенький можно в раздел для начинающих, я как-то сразу его не заметил (

4

xargs работает одинаково на всех дистрах... перемещаю тему

5 (13.05.2010 17:59:27 отредактировано inneska)

ufomen пишет:

Теперь остается другой вопрос как заставить xargs передавать аргументы по порядку? чтоб ls не смог сделать вывод в удобном ЕМУ формате

А причем тут xargs ?
ls так работает, независимо от того, в каком порядке идут аргументы.
Какая задача стоит?

можно без xargs, и вызывать ls для каждого объекта в отдельности.
Примерно так:
ls | while read FN ; do ls -la $FN ; done

6 (13.05.2010 18:06:21 отредактировано ufomen)

Я просто изначально думал что это xargs так криво аргументы передает, потом понял что это ls так их обрабатывает (опять же интересно почему?).

Задача выяснить можно ли с помощью xargs передавать аргументы по одному за раз а не все скопом, или это нужно делать только через конструкцию типа for?

ну вроде
for i in $(ls); do ls -la $i; done


Ответил до того как увидел вашу правку.

Задача стоит разобраться в xargs и его возможностях ab man честно читал есть ключ -i но это не то.
Бывает у вас такое не поймете почему ТАК и дальше никуда не двинешься пока не узнаешь )

Пока вывод что сам xargs умеет передавать аргументы только скопом.