2016-10-30 11 views
2

У меня есть файл, содержащий список файлов, и я хочу выполнить две команды для каждого файла.Как выполнить несколько команд в списке файлов в bash (xargs?)

Содержание files.txt:

file1 
file2 
file3 

Команды, которые я хочу выполнить на каждом файле, (например) ls -s и du.

Я хочу, чтобы выход в конечном итоге, как это:

<ls size> <du size> file1 
<ls size> <du size> file2 
<ls size> <du size> file3 

Я знаю, как это сделать с помощью Баш скрипт, но есть способ легко сделать это на одной линии, используя замену процесса или что нибудь?

Я думал, что я мог бы сделать что-то подобное, но это не сработало:

cat files.txt | tr '\n' '\0' | xargs -0 -I{} cat <(du {}) <(ls -s {}) 

Это придумали с этими ошибками:

du: cannot access `{}': No such file or directory 
ls: cannot access {}: No such file or directory 

Есть ли способ сделать это?

ответ

1

Вы можете запустить sh с xargs, в котором вы можете поместить несколько команд, например:

xargs -0 -I{} sh -c 'du {}; ls -s {}' 
+0

Спасибо! Хорошо, мой следующий вопрос: я хочу, чтобы 'du' только префикс линии с измеренным размером. Обычным способом является 'du | cut -f1 | tr --delete '\ n'', но я не могу использовать одинарные кавычки, потому что команда 'sh' цитируется с использованием одинарных кавычек. Есть ли способ заменить все, что для части 'du'? – localhost

+0

Вы можете цитировать с двойными кавычками. – janos

 Смежные вопросы

  • Нет связанных вопросов^_^