LINUX.ORG.RU

parallel и imagemagick в loop на bash

 


0

1

Без parallel скрипт отрабатывает хорошо, но в один поток.
С parallel конструкция типа parallel -j 6 convert -units PixelsPerInch -density 300 -strip -interlace Plane -gaussian-blur 0.05 -quality 85% $f
не работает, т.к. переменная $f не обновляется.
в какую сторону копать ?

Deleted

У меня для конвертирования музычки вот такая конструкция:

find "$collection_in" -type f -printf '%P\n' | env SHELL=/bin/bash PARALLEL_SHELL=/bin/bash parallel -q -j+0 convert_func "$collection_in/{}" "$collection_out"
Работает. Попробуй копнуть в этом направлении. convert_func - функция конвертирования, объявлена выше по скрипту, требуется явный export -f convert_func, на место {} подставляются строки выхлопа find, переменные collection_in, collection_out объявлены выше, требуется явный export каждой.

Norong ★★
()
Последнее исправление: Norong (всего исправлений: 1)

А что переменная $f значит и откуда берётся?

utf8nowhere ★★★
()

в какую сторону копать ?

Туториала по gnu parallel

utf8nowhere ★★★
()

Зачем GNU parallel, если есть xargs?

find -iname "source_*.png" | xargs -P 6 mycommand

Более продвинутый вариант:

find ... -print0 | xrags -P 6 -0 -I '{}' mycommand '{}' output/'{}'

Davidov ★★★★
()
Последнее исправление: Davidov (всего исправлений: 1)
Ответ на: комментарий от Davidov

То что нужно, спасибо !
Для работы с подкаталогами получилось так

rsync -av -f"+ */" -f"- *" /in /out/
find /in -iname '*.jpg' -print0 | xargs -P 6 -0 -I '{}' convert -units PixelsPerInch -density 300 -strip -interlace Plane -gaussian-blur 0.05 -quality 85% '{}' /out/'{}'
Только не соображу как передать параметр для rf, чтоб оригинал после конвертирования удалить.

Deleted
()
Ответ на: комментарий от Davidov

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

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Davidov

получилось коряво, но работает
conv.sh:

rsync -av -f"+ */" -f"- *" /in /out/
find /in -iname '*.jpg' -print0 | xargs -P 6 -0 -I '{}' /root/conv2.sh '{}' /out/'{}'
find /in -type d -empty -delete
exit 0

conv2.sh:
OLDIFS=$IFS
IFS=$'\n'
convert -units PixelsPerInch -density 300 -strip -interlace Plane -gaussian-blur 0.05 -quality 85% $1 $2
rm $1
IFS=$OLDIFS
exit 0
В ветку призываются перфекционисты :-D

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.