쉘 병렬 최적화 사용

쉘 병렬 최적화 사용

optipng쉘을 사용하여 8스레드 CPU와 병렬로 실행하고 싶습니다 .

나는 프로그램 자체가 멀티 코어에 최적화되어 있지 않으며 이를 수행할 수 있는 유일한 방법은 8개의 파일을 실행하는 것임을 알고 있습니다.

내 홈 디렉토리에 500개 이상의 PNG 이미지가 있는데 이 작업을 가능한 한 빨리 완료하고 싶습니다.

답변을 받았지만 찾을 수 없는 질문을 할 수도 있습니다.

중요한 경우 이 프로그램의 별칭을 정의했습니다.

alias optipng='optipng -o7 -zm1-9 -strip all -fix -preserve'

이것이 적용되기를 바랍니다. 조언해주세요. 간단할수록 좋습니다. POSIX라면 가장 좋습니다.

xargs나는 또는를 사용한 적이 없으며 parallel사용이 가능하다고 생각합니다.

이 코드를 찾았습니다여기에는 설명이 없지만 해당되는 경우 자세히 설명해주세요.

답변1

아마도 N개의 파일(N은 약 500개)을 처리하는 가장 간단한 방법은 optipng.inN 줄 길이이고 각 파일을 처리하기 위한 한 줄을 포함하는 스크립트를 만드는 것입니다.

#!/bin/bash
for file in *.png; do
    printf 'optipng -o7 -zm1-9 -strip all -fix -preserve %q\n' "$file"
done > optipng.in

optipng.in파일이 올바른지 확인 하고 처리하려는 N개 파일 각각에 대해 올바른 명령을 실행하십시오. 괜찮아 보이는지 확인한 후 다음을 통해 N 명령을 실행하세요 parallel.

parallel < optipng.in

이 크기의 실행의 경우 표준 출력 및 표준 오류를 캡처하여 어떤 파일이 정상적으로 처리되고 있는지, 어떤 파일이 오류를 유발할 수 있는지 확인하는 것이 좋습니다.

parallel < optipng.in > optipng.out 2>&1

추가 개선에는 optipng 등에 대한 각 호출에 대해 stdin/stdout 리디렉션을 분리하는 것이 포함될 수 있습니다.

관련 정보