'find' 명령을 사용하여 PNG 파일을 검색하고 일괄 변환을 위해 출력을 imagemagick으로 파이프합니다.

'find' 명령을 사용하여 PNG 파일을 검색하고 일괄 변환을 위해 출력을 imagemagick으로 파이프합니다.

수천 개의 이미지 파일(주로 JPG이지만 일부는 PNG)이 있는 디렉토리가 있습니다. 파일에는 확장자가 없으며 번호만 매겨져 있습니다. 모두 JPG로 변환해야 합니다.

사용찾다유형이 포함된 모든 파일 목록을 얻을 수 있으며, 여기에서 Imagemagick을 사용하여 유형을 지정하여 PNG에서 JPG로 변환할 수 있습니다.

convert png:10020 jpg:10020.jpg

하지만 저는 이 작업을 모든 파일에 걸쳐 일괄 처리로 수행하고 싶습니다. 출력을 어떻게 파이프할 수 있습니까?찾다모든 PNG 파일을 JPG로 변환하시겠습니까?

답변1

find . -type f | while read IN; do
  if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    convert png:$IN jpg:$IN.jpg;
  fi;
done;

인수의 의미:

  1. .
    현재 디렉토리에서 찾기

  2. -type f
    디렉토리/소켓/등이 아닌 파일을 찾으십시오.

  3. while read IN; do
    각 파일 이름을 변수에 넣고 IN루프를 실행합니다.

  4. if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    파일이 PNG인지 확인하세요.

  5. convert png:$IN jpg:$IN.jpg;
    ...그렇다면 변환하세요.

  6. fi; done;
    이제 끝났습니다!

이번에 테스트했는데 확장자가 없이 PNG로 가득 찬 디렉토리를 .pngJPG로 변환하는 기능이 작동합니다.

관련 정보