bash: обрабатывать список файлов по частям

Установка:

У меня есть несколько сотен файлов, названных как-то input0.dat, input1.dat, ..., input150.dat, которые мне нужно обработать с помощью команды cmd (которая в основном объединяет содержимое всех файлов). Команда cmd принимает в качестве первого параметра имя выходного файла, а затем список имен всех входных файлов:

./cmd output.dat input1.dat input2.dat [...] input150.dat

Проблема:

Проблема в том, что скрипт может обрабатывать только 10 файлов или около того из-за проблем с памятью (не вините меня за это). Таким образом, вместо использования bash расширения подстановочных знаков, как

./cmd output.dat *dat

мне нужно сделать что-то вроде

./cmd temp_output0.dat file0.dat file1.dat [...] file9.dat
[...]
./cmd temp_outputN.dat fileN0.dat fileN1.dat [...] fileN9.dat

После этого я могу объединить временные выходы.

./cmd output.dat output0.dat [...] outputN.dat

Как мне написать эффективный сценарий в bash?

Я пытался, но безуспешно, например

for filename in `echo *dat | xargs -n 3`; do [...]; done

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

EDIT: Обратите внимание, что мне нужно указать имя выходного файла в качестве первого аргумента командной строки при вызове cmd!

5
задан fuenfundachtzig 20 January 2012 в 17:14
поделиться