Bagaimana cara mengkonversi semua file pdf ke teks (dalam folder) dengan satu perintah?

18

Saya tahu bahwa saya dapat mengonversi file pdf ke file teks satu per satu seperti ini:

$ pdftotext filename.pdf

Tetapi apakah ada satu perintah yang akan melakukan konversi itu tanpa menentukan nama file yang terpisah untuk mengonversi semuanya?

Saya melihat di sini, di Wikipedia , bahwa "Wildcard (*), misalnya $ pdftotext * pdf, untuk mengonversi banyak file, tidak dapat digunakan karena pdftotext hanya mengharapkan satu nama file."


sumber

Jawaban:

23

Berikut ini akan mengonversi semua file di direktori saat ini:

for file in *.pdf; do pdftotext "$file" "$file.txt"; done
Sam
sumber
ini hanya satu perintah, itu dapat diketik dalam satu baris di terminal (dengan pdftotext di dalam for for loop dalam satu-baris-sintaks, yang diminta oleh op)
Sam
lihat tautan ini untuk info lebih lanjut tentang cara kerja for loop: cyberciti.biz/faq/bash-for-loop thegeekstuff.com/2011/07/bash-for-loop-examples
Sam
Apakah ini tidak akan menyebabkan masalah dengan file non-pdf?
cprofitt
Bukankah ini menghasilkan file seperti "filename.pdf.txt"?
Ryan C. Thompson
ya, jika itu masalah, kita bisa menghapus ekstensi .pdf menggunakan 'sed' atau 'awk' tetapi itu akan menambah kompleksitas pada perintah
Sam
8
ls *.pdf | xargs -n1 pdftotext

xargsseringkali merupakan solusi cepat untuk menjalankan perintah yang sama beberapa kali hanya dengan perubahan kecil setiap kali. The -n1pilihan memastikan bahwa hanya satu file pdf diteruskan ke pdftotext pada suatu waktu.

Sunting: Jika Anda khawatir tentang spasi dalam nama file dan semacamnya, Anda dapat menggunakan alternatif ini:

find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext
Ryan C. Thompson
sumber
tolong lihat jawaban saya: dapatkah perintah itu diadaptasi untuk menghindari masalah yang disebutkan di sana? ini tidak berarti bahwa solusi Anda tidak baik, sebaliknya, ia melakukan sesuatu yang sangat spesifik bahwa alternatif lain di sini tidak. tetapi saya hanya ingin tahu
2
Atau:ls *.pdf | xargs -L1 -I% pdftotext % %.txt
kenorb
2

tulis skrip bash

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

atau ketik di perintah satu baris sebagai berikut:

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

Saya harap ini membantu. Saya tidak memiliki grup besar .pdf untuk mengujinya, tetapi saya menggunakan strategi ini untuk mengonversi file .flac saya menjadi file .ogg.

cprofitt
sumber
dapatkah itu dilakukan dengan membuka terminal di folder itu dan menjalankan perintah alih-alih memasukkan jalur secara manual?
tidak bisakah Anda menempelkannya di sini dan memasukkannya ke dalam jawaban Anda? itu akan menjadi jawaban yang bagus. saya tidak dapat mencapai formula yang baik hanya dengan menghapus bagian dari apa yang Anda posting
menemukan dan xargs saya awalnya menyarankan tidak berfungsi ketika saya mendapat kesempatan untuk mengujinya.
cprofitt
1

Saya harus berterima kasih kepada Sam dan Ryan Thompson juga kepada semua penjawab lainnya - karena jawaban saya di sini hanyalah variasi yang berkaitan dengan kemungkinan menambahkan solusi mereka ke tindakan kustom Thunar:

jadi, seperti perintah terminal apa pun, perintah untuk mengonversi ke teks semua file pdf dalam folder dapat dimasukkan ke dalam daftar tindakan khusus di manajer file Thunar

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Perintah yang ada find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext, (berasal dari Ryan Thompson ) itu adalah yang saya lebih suka gunakan, tetapi memiliki giliran yang buruk ... lihat di bawah ...

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

... itu adalah perintah yang lucu, untuk digunakan dengan hati-hati: itu dibuat untuk mengkonversi ke teks semua pdf di dalam folder di mana ia dipecat, jadi, jika dipecat secara tidak sengaja di folder home, itu akan memiliki beberapa yang tidak diinginkan efek: semua pdf Anda akan dikonversi ke teks!

(Saya mengujinya seperti ini: membuat folder bernama "test" di desktop dan di dalamnya ada file pdf dan serangkaian folder di dalam folder ( /Desktop/test/a/b/c/e/f/g/h/i) masing-masing berisi pdf yang sama. Menjalankan perintah itu /Desktop/testtelah mengonversi semua pdf ke dalam folder "i".)

(Saya akan menerima komentar tentang bagaimana menyesuaikan perintah ini untuk menghindari risiko itu.)

Mengganti itu dengan yang lain ( for file in *.pdf; do pdftotext "$file" "$file.txt"; done) yang berasal dari Sam , masalahnya dihindari.

Tetapi dalam kasus-kasus tertentu orang mungkin berharap apa yang dilakukan solusi Ryan!

Komunitas
sumber
1
Anda dapat menghindari findperintah mencari di subdirektori dengan menggunakan -maxdepth 1. Juga, ketika memasukkannya ke fitur tindakan khusus Thunar, Anda mungkin harus menggantinya find .dengan find %Funtuk memungkinkan Thunar melewati jalur direktori yang dipilih dengan benar.
Ryan C. Thompson
0
for file in *.pdf; do pdftotext "$file" "$file.txt"; done

Ini menghasilkan sample.pdf.txt .

Saya mencoba menggunakan yang ini, seperti yang disarankan user2357111317 dan saya juga menyertakan -layout untuk mempertahankan tata letak teks

for file in *.pdf; do pdftotext -layout "$file"; done
hinky
sumber