내 디렉토리에 여러 개의 PDF 파일이 있습니다. PDF 라이브러리를 활용하여 특정 페이지를 새 파일(별도의 출력 폴더)에 저장하고 싶습니다.
가장 좋은 접근 방식은 무엇입니까?
이것은 내가 작성한 코드이지만 더 많은 추가 사항이 필요합니다.
#!/bin/bash
# Saves 1st 4 pages or every pdf file to a new file.
for i in *.pdf; do
pdfcpu trim -pages "1-4" ${i}.pdf output ${i + %}.pdf
done
이 코드는 작동하지 않지만 이 수준까지 왔습니다. 내 질문,
- 각 파일을 반복하는 방법
- 처음 4페이지만 다른 폴더에 저장하세요.
답변1
당신은 가깝습니다.
#! /bin/bash -
shopt -s nullglob
mkdir -p trimmed || exit
ret=0
for file in ./*.pdf; do
pdfcpu trim -pages 1-4 "$file" "trimmed/$file" || ret="$?"
done
exit "$ret"
./
glob을 사용할 때 . 로 끝나지 않도록 접두사를 사용하는 것이 가장 좋습니다-
.- Bash/sh에서는 매개변수 확장을 인용해야 합니다.
- Bash/sh에서 glob이 일치하지 않으면 패턴이 그대로 명령에 전달됩니다. Bash에서는 이 기능을 사용하여
shopt -s nullglob
(또는failglob
다른 효과를 사용하여) 이 오류를 해결할 수 있습니다 . $i
루프에.pdf
확장자를 포함한 전체 파일 이름을 포함합니다. 를 사용하면${i}.pdf
두 개의 확장자가 생기고pdfcpu
해당file.pdf.pdf
파일을 찾을 수 없습니다.${i + %}
무의미한. 이것으로 무엇을 달성하고 싶은지 명확하지 않습니다.$file
==의 출력 파일 이름을file.pdf
로 지정 하려면 이를 출력 파일 경로로 전달할trimmed/file%.pdf
수 있습니다 ."trimmed/${file%.pdf}%.pdf"
- ~에 따르면수동, 거기 있으면 안 돼요
output
. - 실패에 주의를 기울이고 실패가 발생하면 어떻게 해야 하는지 기억하세요. 여기서
pdfcpu
명령이 실패하면 나머지 명령을 계속 실행하지만 스크립트의 종료 상태에 실패를 보고합니다.