2016-01-08 4 views
0

echo ls -l -a/| xargs sh -cКак передать команду с параметрами в xargs

Как сделать над командованием работу?

это только список текущего каталога

кажется только передаются сберегательный xargs

echo '"ls -l -a /"' | xargs sh -c будет работать, хотя, но вход у меня есть нет «»

ответ

0

-c флага sh принимает только один аргумент, в то время как xargs разделяет аргументы в пробеле - вот почему работает двойное цитирование (один уровень, чтобы сделать его одним словом для оболочки, один для xargs).

Если вы используете -0 или null аргумент xargs ваш конкретный случай будет работать:

 
echo ls -l -a/| xargs -0 sh -c 
+1

Другое option: 'echo ls -l -a/| xargs -I '{}' sh -c "{}" ' – anishsane

1

Источник: http://www.unixmantra.com/2013/12/xargs-all-in-one-tutorial-guide.html

как было упомянуто @darklion, -I обозначили список аргументов и маркер -c обозначает команду bash для запуска на каждой строке ввода до xargs.

Просто распечатайте вход в xargs:

ls -d */ | xargs echo 
#One at a time 
ls -d */ | xargs -n1 echo 

Больше операций на каждом входе:

ls -d */ | xargs -n1 -I {} /bin/bash -c ' echo {}; ls -l {}; ' 

Вы можете заменить {} с заказной строки как:

ls -d */ | xargs -n1 -I file /bin/bash -c ' echo file; ls -l file; ' 
Смежные вопросы