Всем привет,
Задался тут вопросом в каком порядке 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 не смог сделать вывод в удобном ЕМУ формате :D
Порядок передачи аргументов xargs
Какое отношение тема имеет к Красношапочным дистрибутивам?
Какое отношение тема имеет к Красношапочным дистрибутивам?
Прямое, эксперимент проводился на Centos 5.4 )
Если написал не туда прошу переместить.
Я думаю т.к. вопрос простенький можно в раздел для начинающих, я как-то сразу его не заметил (
xargs работает одинаково на всех дистрах... перемещаю тему
Теперь остается другой вопрос как заставить xargs передавать аргументы по порядку? чтоб ls не смог сделать вывод в удобном ЕМУ формате
А причем тут xargs ?
ls так работает, независимо от того, в каком порядке идут аргументы.
Какая задача стоит?
можно без xargs, и вызывать ls для каждого объекта в отдельности.
Примерно так:
ls | while read FN ; do ls -la $FN ; done
Я просто изначально думал что это xargs так криво аргументы передает, потом понял что это ls так их обрабатывает (опять же интересно почему?).
Задача выяснить можно ли с помощью xargs передавать аргументы по одному за раз а не все скопом, или это нужно делать только через конструкцию типа for?
ну вроде
for i in $(ls); do ls -la $i; done
Ответил до того как увидел вашу правку.
Задача стоит разобраться в xargs и его возможностях :) man честно читал есть ключ -i но это не то.
Бывает у вас такое не поймете почему ТАК и дальше никуда не двинешься пока не узнаешь )
Пока вывод что сам xargs умеет передавать аргументы только скопом.