100페이지가 넘는 PDF 파일을 검색하여 UNIX/LINUX 터미널의 디렉터리로 이동합니다.

100페이지가 넘는 PDF 파일을 검색하여 UNIX/LINUX 터미널의 디렉터리로 이동합니다.

100페이지가 넘는 PDF 파일을 검색하여 UNIX/LINUX 터미널에서 특정 디렉터리로 이동하려고 합니다. 이 같은:

find . -name '*.pdf' -pagenumber>100 -exec mv -t ~/directory

분명히 -pagenumber>100이것은 올바른 명령이 아닙니다. 특별한 명령이 있나요?

답변1

여기서 어려운 점은 PDF 문서의 페이지 수를 계산하는 것입니다.

유틸리티 find자체로는 이 작업을 수행할 수 없으므로 이를 수행하려면 외부 도구가 필요합니다.

대부분의 Unix 시스템에서는 를 설치할 수 있습니다 exiftool. 이 도구는 libimage-exiftool-perlUbuntu 및 OpenBSD 패키지의 일부 입니다 p5-Image-ExifTool. PDF 문서의 페이지 수를 출력하는 등 미디어 파일의 메타데이터와 관련된 많은 작업을 수행할 수 있습니다.

$ exiftool -s3 -PageCount document.pdf
10

이를 사용하여 find100페이지가 넘는 문서를 별도의 디렉터리로 이동할 수 있습니다.

mkdir -p ~/tmp/100-plus-pages || exit

find . -name '*.pdf' -type f -exec sh -c '
    for pathname do
        if [ "$(exiftool -s3 -PageCount "$pathname")" -gt 100 ]; then
            mv "$pathname" ~/tmp/100-plus-pages
        fi
    done' sh {} +

이는 발견된 PDF 파일 배치에 대한 짧은 인라인 스크립트를 호출합니다. 인라인 스크립트는 발견된 파일의 현재 배치를 반복하고 exiftool각 파일에 대해 명령을 실행합니다. 명령으로 출력된 숫자가 100보다 크면 파일은 디렉토리로 이동 100-plus-pages됩니다 ~/tmp.

우리는 대상 디렉토리에서 PDF 파일을 검색하는 것을 피하고 싶기 때문에 아래에 해당 디렉토리를 만들기로 선택했습니다 ~/tmp(검색 위치와는 별개이지만 find동일한 파일 시스템에 있기를 원할 수도 있음). 현재 디렉토리에 유지하려면 다음을 수행하여 입력을 피할 수도 있습니다.

mkdir -p 100-plus-pages || exit

find . -path ./100-plus-pages -prune -o -name '*.pdf' -type f -exec sh -c '
    for pathname do
        if [ "$(exiftool -s3 -PageCount "$pathname")" -gt 100 ]; then
            mv "$pathname" 100-plus-pages
        fi
    done' sh {} +

mv먼저 바꾸기를 사용하여 테스트 실행 해 볼 수도 있습니다 echo.

답변2

poppler-utils각 PDF 파일에서 Pdfinfo(Debian 시스템의 경우 패키지에서)를 실행하고 이를 Awk로 파이프하여 행을 찾은 다음 페이지 Pages:수가 100보다 큰 경우에만 0(성공)으로 종료할 수 있습니다.

find . -name '*.pdf' -exec sh -c '
  pdfinfo "$1" | awk "/^Pages:/{exit !(\$2>100)}"
' _ {} \; -exec mv {} ~/dir \;

\$2Awk 스크립트는 큰따옴표 안에 있고 쉘은 $2위치 인수로 확장되므로 이스케이프해야 한다는 점에 유의하세요 .

awk논리식은 평가되어 이를 true로 (\$2>100)반환하고 1쉘은 true를 find사용 하므로 0올바른 종료 코드 =>를 얻으려면 이를 반대로 해야 합니다 !(\$2>100). 따라서 awk둘을 결합할 때 쉘과 쉘 사이의 true 및 false에 대한 반대 정의를 고려해야 합니다.

Pdftk도 비슷한 방식으로 사용할 수 있습니다: pdftk "$1" dump_data;참조이 답변PDF 파일의 페이지 수를 계산하는 방법에 대해 자세히 알아보세요.

관련 정보