Вы хотите
Рекурсивно вызовите в весь PDFs:
shopt -s globstar
.*.pdf
файлы под текущим каталогом: **/*.pdf
Создайте цикл, который выполняет итерации по упомянутым файлам:
for filename in **/*.pdf
do
something
done
Теперь, Вы хотите сделать что-то на файлах: что-то convert -thumbnail x80 95.pdf[0] thumb_95.png
. Существует несколько путей: Я обычно использую basename
, в этом случае Вам было бы нужно $(dirname $filename)/$(basename $filename .pdf).png
, но другой интересный (и более простой) подход должен использовать инструменты обработки строк удара:
.pdf
от конца имени файла: ${filename%.pdf}
.png
: ${filename%.pdf}.png
Наконец, мы можем склеить все это (не забывайте, что это требует globstar, shopt -s globstar
):
for filename in **/*.pdf
do
convert -thumbnail x80 $filename[0] ${filename%.pdf}.png
done
Это не только возможно, но и рекомендуется в некоторых ситуациях.
GNU Parallel занимает около 10 мс на выполнение задания. Таким образом, если у вас есть 8 ядер, а запущенные задания занимают менее 70 мс, то вы увидите, что GNU Parallel использует 100% одного ядра, и все же будет время простоя на других ядрах. Таким образом, вы не будете использовать 100% всех ядер.
Другая ситуация, в которой это рекомендуется, это если вы хотите запустить больше заданий, чем -j0
. В настоящее время -j0
будет параллельно работать около 250 вакансий, если не скорректировать некоторые системные ограничения. Имеет смысл запустить более 250 вакансий, если они не ограничены процессором и дисковым вводом/выводом. Это, например, верно, если сетевая задержка является лимитирующим фактором.
Однако, использование 2 списков не является рекомендуемым способом разделения заданий. Рекомендуемый способ - использовать GNU Parallel для вызова GNU Parallel:
cat list0 | parallel -j20 --pipe parallel -j100
Это приведет к параллельному выполнению 2000 заданий. Чтобы запустить больше настроек -j
. Рекомендуется, чтобы внешнее (20) количество ядер было как минимум таким, чтобы на каждом ядре был хотя бы один параллельный процесс GNU.
Используя эту технику, у вас не должно возникнуть проблем с запуском 20000 параллельных рабочих мест; когда вы получите более 32000 процессов, все начнет работать.
.