![루프를 사용하여 bash에서 pdftk 매개변수 생성](https://linux55.com/image/167183/%EB%A3%A8%ED%94%84%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20bash%EC%97%90%EC%84%9C%20pdftk%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%20%EC%83%9D%EC%84%B1.png)
k에 n=1을 포함하는 파일 이름 목록을 생성하고, 끝에 "cat 출력 xyz.pdf" 문자열을 추가하고 결과를 매개변수로 전달하려면 pdftk
다음과 같이 실행해야 합니다.
pdftk file1.pdf file2.pdf file3.pdf cat output xyz.pdf
CLI에서 이를 직접 자동화하려면 어떻게 해야 합니까?
답변1
질문 태그에 표시된 대로 bash를 사용하는 경우 루프가 필요하지 않습니다.버팀대 확장.
전임자. k = 32인 경우
pdftk file{1..32}.pdf cat output xyz.pdf
파일 개수가 다음과 같은 경우매우규모가 크면 이 접근 방식은 제한적일 수 있습니다 ARG_MAX
("인수 목록이 너무 깁니다" 오류 발생).
답변2
다음과 같은 것이 당신이 원하는 것일 수 있습니다.
#!/bin/bash
filelist=""
for i in {1..5}; do
filelist+="file${i}.pdf "
done
pkftk ${filelist} cat output xyz.pdf
루프는 1..k에서 시작하여 "file1.pdf ... filek.pdf"를 포함하는 문자열을 작성합니다. 루프가 완료되면 pdftk
질문에 지정한 "cat 출력 xyz.pdf"와 함께 파일 목록을 전달합니다.
라인을 원하면 위의 내용을 다음과 같이 압축할 수 있습니다(여기서 가정 k=5
).
pdftk $(for i in {1..5}; do printf "%s " file$i.pdf; done) cat output.xyz.pdf
논리는 동일하지만 for
루프를 실행하기 위해 명령 대체를 사용하고 있습니다. 이 출력은 (이 경우 파일 목록)로 대체됩니다 $(...)
. 대신 개행을 피하는 방법으로 ...
사용합니다 .printf
echo