Tüm pdf dosyalarını tek bir komutla metne (klasör içinde) nasıl dönüştürebilirim?


18

Ben pdf dosyalarını böyle metin dosyaları tek tek dönüştürebilirsiniz biliyorum:

$ pdftotext filename.pdf

Ancak hepsini dönüştürmek için ayrı dosya adları belirtmeden bu dönüşümü yapacak tek bir komut var mı?

Anlıyorum burada, Wikipedia'daki "Joker karakterler (*), örneğin $ pdftotext için * pdf, birden fazla dosya dönüştürmek için, pdftotext beklentiden dolayı sadece bir dosya adı kullanılamaz." Diye,

pdf  text  convert  batch 

Yanıtlar:


23

Aşağıdakiler geçerli dizindeki tüm dosyaları dönüştürür:

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

onun tek bir komutu, terminalde bir satırda yazılabilir (tek satır-sözdiziminde bir for döngüsü içindeki pdftotext, op'un istediği şey)
Sam

for loop'un nasıl çalıştığı hakkında daha fazla bilgi için bu bağlantılara göz atın
Sam

pdf olmayan dosyalarla ilgili sorunlara neden olmaz mı?
cprofitt

Bu, "dosyaadı.pdf.txt" gibi dosyalar üretmez mi?
Ryan C. Thompson

evet, bu bir sorunsa, .pdf uzantısını 'sed' veya 'awk' kullanarak kaldırabiliriz, ancak komuta karmaşıklık katacaktır
Sam

8
ls *.pdf | xargs -n1 pdftotext

xargsher seferinde sadece küçük bir değişiklikle aynı komutu birden çok kez çalıştırmak için hızlı bir çözümdür. Bu -n1seçenek, pdftotext'e aynı anda yalnızca bir pdf dosyasının aktarılmasını sağlar.

Düzenleme: Dosya adlarındaki boşluklar ve benzerlerinden endişe ediyorsanız, bu alternatifi kullanabilirsiniz:

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

lütfen cevabımı görün: bu komut orada belirtilen problemden kaçınmak için uyarlanabilir mi? bu, çözümünüzün iyi olmadığı anlamına gelmez, aksine, diğer alternatiflerin yapmadığı çok özel bir şey yapar. ama ben sadece merak

2
Alternatif olarak:ls *.pdf | xargs -L1 -I% pdftotext % %.txt
kenorb

2

bash betiği yaz

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

veya aşağıdaki gibi tek satırlık bir komutla yazın:

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

Umarım bu yardımcı olur. Bunu test etmek için .pdfs büyük bir grup yok, ama .flac dosyaları .ogg dosyaları dönüştürmek için bu stratejiyi kullanın.


bu klasördeki terminali açıp yolu manuel olarak eklemek yerine bir komut çalıştırarak yapılabilir mi?

buraya böyle yapıştırıp cevabınıza ekleyemez misiniz? bu iyi bir cevap olurdu. Ben sadece ne gönderdiğini bir kısmını silerek iyi formüle ulaşmak mümkün değildi

başlangıçta önerdiğim bul ve xargs, onları test etme şansım olduğunda işe yaramadı.
cprofitt

1

İlk önce Sam'e ve Ryan Thompson'a ve diğer tüm cevaplayıcılara teşekkür etmeliyim - burada cevabım, Thunar'ın özel eylemlerine çözümlerini ekleme olasılığından başka bir şey değil:

herhangi bir terminal komutu olarak, bir klasör içindeki tüm pdf dosyalarını metne dönüştürmek için bir komut Thunar dosya yöneticisindeki özel eylemler listesine konabilir

resim açıklamasını buraya girin

resim açıklamasını buraya girin

resim açıklamasını buraya girin

Buradaki komut find . -name '*.pdf' -print0 | xargs -0 -n1 pdftotext, ( Ryan Thompson'dan geliyor ) kullanmayı tercih ettiğim, ama kötü bir dönüş var ... aşağıya bakın ...

resim açıklamasını buraya girin

resim açıklamasını buraya girin

... komik bir komut, dikkatle kullanılacak: ateşlendiği klasördeki tüm pdf'leri metne dönüştürmek için yapılır, bu nedenle, ana klasörde yanlışlıkla ateşlenirse, bazı istenmeyen etkileri: tüm pdf dosyalarınız metne dönüştürülecek!

(Bu şekilde test ettim: masaüstünde "test" adında bir klasör oluşturdu ve içinde bir pdf dosyası ve /Desktop/test/a/b/c/e/f/g/h/iher biri aynı pdf'yi içeren klasörler içinde bir dizi klasör oluşturdu . Bu komutu çalıştırmak /Desktop/testtüm pdfs'yi "i" klasörü.)

(Bu riski önlemek için bu komutun nasıl ayarlanacağıyla ilgili yorumları memnuniyetle karşılarım.)

Bunu for file in *.pdf; do pdftotext "$file" "$file.txt"; doneSam'den gelen diğeriyle ( ) değiştirmek , problemden kaçınır.

Ancak bazı durumlarda Ryan'ın çözümünün tam olarak ne yapması istenebilir!


1
findKomutunu kullanarak alt dizinlerde arama yapmaktan kaçınabilirsiniz -maxdepth 1. Thunar en özel eylemler özelliği içine koyarak Ayrıca, muhtemelen değiştirmelisiniz find .ile find %FThunar düzgün seçilmiş dizinleri yolları geçmesine izin vermek.
Ryan C. Thompson

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

Bu, sample.pdf.txt çıktısını verir .

Bunu user2357111317 önerdiği gibi kullanmayı denedim ve ayrıca metnin düzenini korumak için -layout ekledim

for file in *.pdf; do pdftotext -layout "$file"; done
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.