optipng
쉘을 사용하여 8스레드 CPU와 병렬로 실행하고 싶습니다 .
나는 프로그램 자체가 멀티 코어에 최적화되어 있지 않으며 이를 수행할 수 있는 유일한 방법은 8개의 파일을 실행하는 것임을 알고 있습니다.
내 홈 디렉토리에 500개 이상의 PNG 이미지가 있는데 이 작업을 가능한 한 빨리 완료하고 싶습니다.
답변을 받았지만 찾을 수 없는 질문을 할 수도 있습니다.
중요한 경우 이 프로그램의 별칭을 정의했습니다.
alias optipng='optipng -o7 -zm1-9 -strip all -fix -preserve'
이것이 적용되기를 바랍니다. 조언해주세요. 간단할수록 좋습니다. POSIX라면 가장 좋습니다.
xargs
나는 또는를 사용한 적이 없으며 parallel
사용이 가능하다고 생각합니다.
이 코드를 찾았습니다여기에는 설명이 없지만 해당되는 경우 자세히 설명해주세요.
답변1
아마도 N개의 파일(N은 약 500개)을 처리하는 가장 간단한 방법은 optipng.in
N 줄 길이이고 각 파일을 처리하기 위한 한 줄을 포함하는 스크립트를 만드는 것입니다.
#!/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 리디렉션을 분리하는 것이 포함될 수 있습니다.