xargs를 사용하여 이미지를 일괄 변환하고 변환합니다. 출력 파일의 이름을 지정하는 방법은 무엇입니까?

xargs를 사용하여 이미지를 일괄 변환하고 변환합니다. 출력 파일의 이름을 지정하는 방법은 무엇입니까?

우리 모두 알고 있듯이 다음 명령을 사용하여 이미지를 단일 PDF로 변환할 수 있습니다(이미지 파일 이름이 올바른 순서로 되어 있다고 가정).

convert *.jpg output.pdf.

그러나 수천 개의 이미지가 관련된 경우 이 접근 방식은 너무 많은 RAM을 차지할 수 있습니다. 또 다른 아이디어는 이미지를 PDF로 일괄 변환한 다음 결과 PDF를 단일 PDF로 연결하는 것입니다 pdftk.

pdftk output-*.pdf cat output output.pdf

지금까지 다음 명령을 사용하여 이미지를 일괄 변환해 보았습니다 xargs.

ls *.jpg | xargs -d $'\n' -t -n 100 bash -c 'convert "$@" output.pdf'

convert매번 이전 PDF를 삭제한다는 점을 제외하면 잘 작동합니다 .

질문: 배치 번호를 세어 순차적으로 생산하는 방법이 있습니까? 예를 들어 output-1.pdf..., output-9.pdf?

답변1

xargsGNU 로 전환할 수 있다면 parallel,하다{#}실행 중인 일련 번호가 포함된 대체 문자열을 제공합니다 .

예를 들어 주어진

$ touch File{001..050}.jpg

그 다음에

$ printf '%s\0' *.jpg | parallel --null -n 5 echo convert {} -o output{#}.pdf
convert File001.jpg File002.jpg File003.jpg File004.jpg File005.jpg -o output1.pdf
convert File006.jpg File007.jpg File008.jpg File009.jpg File010.jpg -o output2.pdf
convert File011.jpg File012.jpg File013.jpg File014.jpg File015.jpg -o output3.pdf
convert File016.jpg File017.jpg File018.jpg File019.jpg File020.jpg -o output4.pdf
convert File021.jpg File022.jpg File023.jpg File024.jpg File025.jpg -o output5.pdf
convert File026.jpg File027.jpg File028.jpg File029.jpg File030.jpg -o output6.pdf
convert File031.jpg File032.jpg File033.jpg File034.jpg File035.jpg -o output7.pdf
convert File036.jpg File037.jpg File038.jpg File039.jpg File040.jpg -o output8.pdf
convert File041.jpg File042.jpg File043.jpg File044.jpg File045.jpg -o output9.pdf
convert File046.jpg File047.jpg File048.jpg File049.jpg File050.jpg -o output10.pdf

답변2

xargs는 현재 인스턴스를 평가하는 방법을 제공하지 않습니다. 다른 이름을 얻을 수 있지만 ls *.jpg | xargs -d $'\n' -t -n 100 bash -c 'convert "$@" output-$$.pdf'파일 타임스탬프를 기반으로 순서를 파악해야 합니다.

한 가지 해결책은 단계별로 결합하는 것입니다.

ls *.jpg  |  xargs -d $'\n' -t -n 100 bash -c 'convert "$@" temp.pdf'; if [ -f output.pdf ]; then mv temp.pdf next.pdf; pdftk output.pdf next.pdf cat output temp.pdf; fi; mv temp.pdf output.pdf`

가장 좋은 방법은 각 이미지를 개별적으로 변환하는 것입니다.

find -name \*.jpg -exec convert \{\} \{\}.pdf \;
pdftk *.jpg.pdf cat output output.pdf

더 간단하며 별도의 프로세스에서 각 이미지를 변환하는 비용은 하나의 변환 인스턴스가 N개의 이미지를 처리하는 것과 대략 동일합니다.

또한 이미지 중 하나가 실제로 주문되지 않은 경우 이제 배치가 변경되었으므로 각 이미지를 다시 변환할 필요 없이 재배열하는 것이 더 간단할 것입니다.

관련 정보