Возможно, пробный прогон - то, что Вы ищете?
make --dry-run fred
Страница справочника дает нам это о пробном прогоне:
-n, --just-print, --dry-run, --recon
Print the commands that would be executed, but do not
execute them.
Таким образом, это не даст Вам прямой список, но косвенный список, так как Вы знаете, что он хотел бы выполнить то, от чего он зависит.
Если у Вас есть копия xargs
это поддерживает параллельное выполнение с -P
, можно просто сделать
printf '%s\0' *.png | xargs -0 -I {} -P 4 ./pngout -s0 {} R{}
Для других идей Bash Wooledge Wiki имеет раздел в статье управления процессами, описывающей точно, что Вы хотите.
Если у Вас есть Параллель GNU, http://www.gnu.org/software/parallel/ установил Вас, может сделать это:
parallel ./pngout -s0 {} R{} ::: *.png
Можно установить Параллель GNU просто:
wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem
Посмотрите вводные видео для Параллели GNU для узнавания больше: https://www.youtube.com/playlist? list=PL284C9FF2488BC6D1
В дополнение к решениям, уже предложенным, можно создать make-файл, который описывает, как сделать сжатый файл из несжатого, и использование make -j 4
выполнять 4 задания параллельно. Проблема состоит в том, что необходимо будет назвать сжатые и несжатые файлы по-другому или сохранить их в различных каталогах, еще пишущий, что разумное делает правило, будет невозможно.
Отвечать на Ваши два вопроса:
wait
команда, можно попросить, чтобы оболочка ожидала всех процессов в фоновом режиме для окончания прежде, чем продолжиться дальше.Вот сценарий, измененный так, чтобы j
используется для отслеживания количество фоновых процессов. Когда NB_CONCURRENT_PROCESSES
достигнут, сценарий сбросит j
к 0 и ожидают всех фоновых процессов для окончания прежде, чем возобновить, что это - выполнение.
files=(./*.png)
nb_concurrent_processes=4
j=0
for f in "${files[@]}"
do
echo "Processing $f file..."
# take action on each file. $f store current file name
./pngout -s0 "$f" R"${f/\.\//}" &
((++j == nb_concurrent_processes)) && { j=0; wait; }
done
$f
и т.д. (3) Использование [
для POSIX совместимые сценарии, но для чистого удара [[
всегда предпочитается. В этом случае, ((
более подходит для арифметики.
– jw013
31.03.2012, 23:30
pngout
управляйте, чтобы OP хотел работать. Ключевая опция-P 4
, который говорит xargs использовать до 4 параллельных команд. – jw013 01.04.2012, 13:05printf
функционируйте здесь, а не просто регулярныйls .. | grep .. *.png
? Также я интересовалсяxargs
параметры Вы использовали (-0
и-I{}
).Спасибо! – Eugene S 01.04.2012, 14:12ls
не может использоваться для парсинга имен файлов портативно и безопасно. Единственные безопасные символы для использования для разграничивания имен файлов\0
и/
, начиная с любого символа, включая\n
, может быть часть самого имени файла.printf
использование\0
разграничить имена файлов, и-0
сообщаетxargs
из этого.-I{}
говоритxargs
заменять{}
с аргументом. – jw013 01.04.2012, 21:23