하나의 명령으로 모든 PDF 파일을 폴더 내에서 텍스트로 변환하는 방법은 무엇입니까?


18

나는 pdf 파일을 다음과 같이 하나씩 텍스트 파일로 변환 할 수 있음을 알고 있습니다.

$ pdftotext filename.pdf

그러나 별도의 파일 이름을 지정하지 않고 변환하여 모든 파일을 변환하는 단일 명령이 있습니까?

내가보고 여기, 위키 백과에 "와일드 카드 (*), 예를 들어 $의 pdftotext에 대한 * PDF, 여러 개의 파일을 변환, pdftotext 예상하는 때문에 하나의 파일 이름을 사용할 수 없습니다."고,

pdf  text  convert  batch 

답변:


23

다음은 현재 디렉토리의 모든 파일을 변환합니다.

for file in *.pdf; do pdftotext "$file" "$file.txt"; done

단 하나의 명령으로, 터미널에서 한 줄로 입력 할 수 있습니다 (단, 한 줄 문법으로 for 루프 안에있는 pdftotext는 op가 요청한
Sam

for 루프 작동 방식에 대한 자세한 내용은 다음 링크를 확인하십시오. cyberciti.biz/faq/bash-for-loop thegeekstuff.com/2011/07/bash-for-loop-examples
Sam

PDF가 아닌 파일에 문제가 발생하지 않습니까?
cprofitt

"filename.pdf.txt"와 같은 파일이 생성되지 않습니까?
라이언 C. 톰슨

예, 문제가 있다면 'sed'또는 'awk'를 사용하여 .pdf 확장자를 제거 할 수는 있지만 명령에 복잡성을 추가 할 수 있습니다.
Sam

8
ls *.pdf | xargs -n1 pdftotext

xargs매번 작은 변경으로 동일한 명령을 여러 번 실행하는 빠른 솔루션입니다. 이 -n1옵션을 사용하면 한 번에 하나의 pdf 파일 만 pdftotext로 전달됩니다.

편집 : 파일 이름 등의 공백이 걱정되면 다음 대안을 사용할 수 있습니다.

find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext

내 대답을 참조하십시오 : 언급 된 문제를 피하기 위해 해당 명령을 조정할 수 있습니까? 이것은 귀하의 솔루션이 좋지 않다는 것을 의미하지는 않지만 다른 대안은 그렇지 않은 매우 구체적인 것을 수행합니다. 하지만 난 그냥 궁금했다

2
다른 방법 :ls *.pdf | xargs -L1 -I% pdftotext % %.txt
kenorb

2

bash 스크립트 작성

for f in *.pdf; do
  pdftotext "$f"
done

또는 다음과 같이 한 줄 명령으로 입력하십시오.

for f in *.pdf; do pdftotext "$f"; done

이게 도움이 되길 바란다. 이것을 테스트 할 큰 .pdf 그룹이 없지만이 전략을 사용하여 .flac 파일을 .ogg 파일로 변환합니다.


해당 폴더에서 터미널을 열고 경로를 수동으로 삽입하는 대신 명령을 실행하여 수행 할 수 있습니까?

여기에 붙여 넣어 답변에 삽입 할 수 없습니까? 좋은 답변이 될 것입니다. 나는 당신이 게시 한 것의 일부를 삭제하는 것만으로도 좋은 공식에 도달 할 수 없었습니다

내가 처음에 제안한 find와 xargs는 테스트 할 기회가있을 때 작동하지 않았다.
cprofitt

1

먼저 SamRyan Thompson 에게 감사 하고 다른 모든 응답자에게도 감사해야합니다. 여기에 내 대답은 Thunar의 사용자 지정 작업에 솔루션을 추가 할 수있는 가능성과 관련된 변형 일뿐입니다.

따라서 모든 터미널 명령으로 폴더 내의 모든 pdf 파일을 텍스트로 변환하는 명령을 Thunar 파일 관리자의 사용자 정의 동작 목록에 넣을 수 있습니다

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

거기에있는 명령은 find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext( 라이언 톰슨 에서 온 ) 내가 선호하는 명령이지만 불쾌한 차례입니다 ... 아래를 참조하십시오 ...

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

...주의 깊게 사용되는 재미있는 명령입니다. 해고 된 폴더 내의 모든 pdf를 텍스트로 변환하도록 만들어 지므로 홈 폴더에서 실수로 해고 된 경우 원치 않는 것이 있습니다 효과 : 모든 PDF 파일이 텍스트로 변환됩니다!

(저는 이것을 다음과 같이 테스트했습니다. 데스크탑에 "test"라는 폴더를 만들고 /Desktop/test/a/b/c/e/f/g/h/i각각 동일한 pdf를 포함 하는 pdf 파일과 폴더 ( ) 내에 일련의 폴더를 만듭니다. 해당 명령을 실행하면 /Desktop/test모든 pdf 가 "i"폴더)

위험을 피하기 위해이 명령을 조정하는 방법에 대한 의견을 환영합니다.

다른 하나 (와 그 교체 for file in *.pdf; do pdftotext "$file" "$file.txt"; done에서 오는) , 문제는 피할 수있다.

그러나 어떤 경우에는 Ryan의 솔루션이하는 일을 정확하게 원할 수 있습니다!


1
find을 사용하여 하위 디렉토리 에서 명령을 검색 하지 않아도됩니다 -maxdepth 1. 하는 Thunar의 사용자 지정 작업 기능으로 퍼팅 할 때 또한, 당신은 아마 교체해야합니다 find .함께 find %F하는 Thunar 제대로 선택한 디렉토리의 경로를 통과 할 수 있도록.
라이언 C. 톰슨

0
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

이것은 sample.pdf.txt를 출력 합니다 .

user2357111317이 제안하고 텍스트 레이아웃을 유지하기 위해 -layout 도 포함 하여이 것을 사용하려고했습니다.

for file in *.pdf; do pdftotext -layout "$file"; done
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.