2013-07-03 3 views
3

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

Что мне нужно сделать, так это передать список файлов в виде списка одиночных аргументов в команду. Например:

ls | tail -10

выходы

a 
b 
c 
d 

, но я хотел бы конвейеру команде воли получить список вроде этого:

command a b c d

Я m guessing xargs - лучший инструмент для работы, но я открыт для всего. Чем проще запомнить, тем лучше.

+0

С 'командой аб c d', список - это не один аргумент, а четыре аргумента. Возможно, вы забыли написать _list_. – Armali

+0

исправлено, спасибо – Ovesh

ответ

1

Просто

ls|xargs command 

будет делать. Конечно, если список не превышает ограничение длины командной строки,

command `ls` 

также достаточно.

+0

Если OP действительно хочет, чтобы имена файлов были объединены как один аргумент, это неверно. –

+0

Если вы прочтете название своего вопроса и исправленный вопрос, вы бы увидели, что это не так. – Armali

1

Вы можете попробовать:

command $(ls|tail -10|paste -s) 

, если вы хотите иметь место в качестве разделителя:

command $(ls|tail -10|paste -s -d" ") 

также xargs имеет -n вариант, вы можете дать выстрел. например:

kent$ seq 5 
1 
2 
3 
4 
5 

kent$ seq 5|xargs -n5 
1 2 3 4 5 
2

Просто используйте кавычки и расширение переменной:

command "$(ls | tail)" 

для тестирования (command):

#!/bin/bash 
echo $1 

Выход:

a b c d