이 명령을 사용하여 PNG 파일을 처리합니다.
find . -iname "*png" -print0 | xargs -r0 --max-procs=4 -n1 sh -c 'pngnq -s1 $1 && advpng -z -4 -q ${$1%.*}-nq8.png' -
실제로는 잘 작동하는 것처럼 보이지만 처리하는 모든 파일에 대해서도 출력합니다.
-: 1: -: Bad substitution
제 생각에는 제가 뭔가 잘못하고 있는 것 같습니다 ${$1%.*}
. 하지만 잘 모르겠습니다. 문서에 따르면 후행 대시는 의도적인 것입니다.여기advpng
- 안타깝게도 stdin/output에서 나오는 내용을 처리할 방법이 없기 때문에 전체를 파이프로 연결할 수는 없습니다. 따라서 파일 이름을 사용해야 합니다.
이 오류가 발생하지 않도록 이 문제를 해결하는 방법을 아는 사람이 있나요?
답변1
한 가지 명백한 문제는 참조가 누락되었다는 것입니다.
... sh -c 'pngnq -s1 "$1" && advpng -z -4 -q "${1%.*}"-nq8.png' -
당신의 가정은 정확합니다. 그것이 ${$1%.*}
진짜 문제입니다. $
괄호 안의 내용은 반복되어서는 안 됩니다.
문서에는 후행 대시가 언급되어 있지 않습니다. 그렇죠? 이름만요.
답변2
GNU 병렬 처리 사용:
find . -iname "*png" -print0 | parallel -0 pngnq -s1 {} '&&' advpng -z -4 -q {.}-nq8.png
GNU Parallel에 대한 자세한 내용은 다음에서 확인할 수 있습니다.http://www.gnu.org/s/parallel/
단 10초 안에 GNU Parallel을 설치할 수 있습니다:
wget -O - pi.dk/3 | sh
소개 영상 보기http://www.youtube.com/playlist?list=PL284C9FF2488BC6D1