1

Тема: Выполнить с помощь xargs более 1 команды

Всем доброго дня!

Назрел такой вопрос: как, скажем, имея список файлов, применить для каждого произвольный набор команд. И все это сделать изящно - в одном скрипте.

Для 1 команды все просто, например:

cat list.txt | xargs -i rm {}

Но как можно сделать так, чтобы вместо rm поставить несколько команд? Пробовал ставить туда вызов своей процедуры, но xargs не работает с процедурами:(

procedure () {
команда1
команда2
...
}
cat list.txt | xargs -i procedure {}

Так что приходится писать кучу мелких скриптов, чтобы вызывать их командой sh:
cat list.txt | xargs -i sh script1 {}

Подскажите, может, есть более изящный путь для такой задачи?

Thumbs up Thumbs down

2

Re: Выполнить с помощь xargs более 1 команды

Кто мешает написать один большой скрипт, который будет с консоли
брать имя файла и параметры?

Thumbs up Thumbs down

3

Re: Выполнить с помощь xargs более 1 команды

Этот скрипт выполняет полный цикл обрботки - он получает в виде параметра имя файла со списком файлов и еще несколько параметров. Потом выполняет набор инструкций над каждым файлом из списка и выдает некий результат. Так вот суть вопроса - как реализовать всю обработку в 1 скрипте, не передавая отдельные имена файлов в виде параметров другому скрипту, а взяв их из файла и обработав сразу произвольное число файлов из списка.

Понимаю, что вопрос, возможно, надуманный, но хочется именно в 1 скрипте все сделать. Может здесь и не xargs, а еще какой-нибудь вариант.

В принципе, можно сделать цикл с переменной, равной номеру строки в файле списка (т.е. имя файла) и при каждом проходе наращивать эти переменную на 1, и так пока файл не кончится. А в цикл уже можно вставить что угодно. Ну, что, такой вариант лучший?

Thumbs up Thumbs down

4

Re: Выполнить с помощь xargs более 1 команды

Что-то типо этого (пишу прямо сюда, могут быть ошибки, но главное суть)

cat list.txt | awk '{print "comm1 "$1" ; comm2 "$1}'|sh

на выходи будит так

comm1 fail.txt ; comm2 fail.txt

5

Re: Выполнить с помощь xargs более 1 команды

SatanaClause пишет:

awk '{print "comm1 "$1" ; comm2 "$1}'|sh

В принципе, отличный вариант (подправив кавычки), но минус в том, что не получится вставить условия, циклы и процедуры

Thumbs up Thumbs down

6

Re: Выполнить с помощь xargs более 1 команды

man awk

он много чего умеет, это целый язык условий и т.д. Я недавно на нем видел какойто лог анализатор, только для squid'a толи для postfix'a... Мощяная штука.