Linux 명령줄에서 재귀적으로 PDF 축소판을 만드는 방법

Linux 명령줄에서 재귀적으로 PDF 축소판을 만드는 방법

ImageMagick을 사용하여 PDF 첫 페이지의 축소판을 만들 수 있습니다.

convert -thumbnail x80 95.pdf[0] thumb_95.png

이것은 잘 작동하고엄지_95.png문서.

xargs를 사용하여 "찾기"의 여러 순열을 시도했지만 소스 PDF와 함께 폴더에 축소판을 만드는 조합을 얻을 수 없습니다.

PDF는 UUID로 명명된 폴더에 있습니다. 예:

/511017a7-67fc-4897-80c1-0d42ac100b68/415.pdf
/511015bc-e0a8-4ab7-ba29-0ce9ac100b68/122.pdf

내가 원하는 결과는 다음과 같습니다

/511017a7-67fc-4897-80c1-0d42ac100b68/415.pdf
/511017a7-67fc-4897-80c1-0d42ac100b68/thumb_415.png
/511015bc-e0a8-4ab7-ba29-0ce9ac100b68/122.pdf
/511015bc-e0a8-4ab7-ba29-0ce9ac100b68/thumb_122.png

모든 *.pdf에 대해 이 변환을 재귀적으로 수행하는 가장 좋은 방법에 대한 도움을 주시면 대단히 감사하겠습니다!

답변1

까다로운 부분은 양식의 파일 이름을 testfile.pdf.png출력으로 가져오지 못한다는 것입니다. 나는 몇 년 전에 같은 문제를 겪었고 다음 도우미 스크립트를 사용하여 문제를 해결했습니다(약간의 수정 포함).

#!/bin/bash 
SRCFRM=pdf
TGTFRM=png
FILE=$1

NEWFILE=$(echo $FILE | sed "s:$SRCFRM\$:$TGTFRM:")
convert -thumbnail x80 $FILE[0] $NEWFILE

홈 디렉토리 같은 곳에 저장하고 다음과 같이 사용하세요.

find /path -name '*.pdf' -exec /path/to/converthelper.sh {} \;

답변2

당신이 원하는

  • 모든 PDF로 재귀:

    1. globstar를 활성화하려면 shopt -s globstar.
    2. *.pdf현재 디렉터리의 모든 파일 목록을 생성하려면 다음을 사용하세요 .**/*.pdf
    3. 해당 파일을 반복하는 루프를 만듭니다.

      for filename in **/*.pdf
      do
          something
      done
      
  • 이제 파일로 뭔가를 하려고 합니다 convert -thumbnail x80 95.pdf[0] thumb_95.png. 여러 가지 방법이 있습니다. 저는 보통 을 사용합니다. basename어떤 경우에는 가 필요 $(dirname $filename)/$(basename $filename .pdf).png하지만 또 다른 흥미롭고 쉬운 방법은 다음을 사용하는 것입니다.Bash용 문자열 조작 도구:

    1. .pdf파일 이름 끝에서 제거하십시오.${filename%.pdf}
    2. 다음에 추가 .png:${filename%.pdf}.png

마지막으로, 우리는 그것들을 서로 붙일 수 있습니다(여기에는 globstar가 필요하다는 것을 잊지 마세요 shopt -s globstar):

for filename in **/*.pdf
do
    convert -thumbnail x80 $filename[0] ${filename%.pdf}.png
done

답변3

이 시도:

find /source/directory -name "*.pdf" -exec \ sh -c 'convert -thumbnail x80 {} $(dirname {})/thumb_$(basename {})' \;

약간 수정해야했습니다.

find /source/directory -name "*.pdf" -exec \ sh -c 'convert -thumbnail x80 {} $(dirname {})/thumb_$(basename {} .pdf)'.png \;

기본 이름에서 파일 확장자를 제거하려면 .png를 추가하세요.

모든 답변에 감사드립니다. 이것은 나에게 아주 효과적입니다!

관련 정보