Çok sayıda pdf dosyasında cümleleri aramak için komut satırı aracı


9

Opensuse 10.3 kullanıyorum ve bir dizin içinde çok sayıda pdf dosyasında ifadeleri aramak için komut satırı araçlarını bilmek istiyorum. Windows XP'de Gezgin araması buna izin verir, ancak çok yavaştır. Burada grep ipuçları var mı?



Önce komut satırı araçlarını bilmek istiyorum ve GUI araçları varsa, o zaman onun da güzel olacak ... Kanat sadece Windows altında. Ve ben sadece pdf dosyalarını aramak istiyorum, bu yüzden bunun için optimize edilmiş bir uygulama olması güzel olurdu
iceman

Yanıtlar:


6
SEARCH_DIR = "/ some / dir / nerede / sen / istediğiniz / için / arama /";
"You-arama ne olursa olsun-" SEARCH_STRING =;
# pdf'den metin ayıklanıyor
pdftotext "file.pdf" "file.txt"

# grep ile bağlanma
pdftotext "file.pdf" / dev / stdout | grep -H --label = "file.pdf" - "$ SEARCH_STRING"

# grep'in yalnızca eşleşen pdf dosyasının dosya listesini göstermesini istiyorsanız - - eşleşmeli dosya ekleyin
pdftotext "file.pdf" / dev / stdout | grep -H --label = "file.pdf" - eşleşmeli dosyalar - "$ SEARCH_STRING"

# arama yapılabilecek olası pdf listesini bul
"$ SEARCH_DIR" türünü f-adı '* .pdf'> pdf.txt listesi
# her şey awk tarafından koli bandı olarak katıldı, işleme için bash'a gönderildi
# çift tırnak awk içinde x22 olarak kaçar.
"$ SEARCH_DIR" tür f-adı '* .pdf' | awk -v SEARCH_STRING = "$ SEARCH_STRING" '{
"pdftotext \ x22" $ 0 "\ x22 / dev / stdout | grep -H --label = \ x22" $ 0 "\ x22 - \ x22" SEARCH_STRING "\ x22"
} '| bash

# Dışarı bash. İhtiyacınıza uygun daha fazla işlem
"$ SEARCH_DIR" türünü f-adı '* .pdf' | awk -v SEARCH_STRING = "$ SEARCH_STRING" '
{
EXEC = "pdftotext \ x22" $ 0 "\ x22 / dev / stdout | grep -H --label = \ x22" $ 0 "\ x22 - \ x22" SEARCH_STRING "\ x22";
while (EXEC | getline ret) {
 print "[" $ 0 "] dosyası için [" ret "]" ile eşleştik;
 # ne istersen yap. 
};
Kapat (EXEC);
}'

Sorunun “Windows XP” den veya Windows arama etiketinden bahsettiğiniz bölümünü fark etmediniz. Sorunun (şaşkınlıkla) “openSUSE” ile başladığını biliyorum , ancak Linux referanslarından daha fazla Windows referansı var; özellikle de sonraki yorumunu saydığınızda .
Synetech

@Synetech: "Wingrep sadece Windows altında" diye cevap vermedi, bu da Linux çözümü istediğini gösteriyor.
Mekanik salyangoz

@Mekaniksnail, bir komut satırı aracı istedi bir GUI aracı olduğu için reddetti.
Synetech

3

Hem Linux hem de Windows altında, birden fazla dosya arama komutu olan Acrobat Reader'ı kullanabilirsiniz.

Linux altında, ilk çalıştırdığınızda pdf dosyalarınızın (ve daha fazlasının) bir dizinini oluşturacak Recoll vardır. Dizin oluşturulduktan sonra, kelime aramaları çok hızlı olmalıdır; sıralı aramalar makul olmalıdır. pdftotextRecoll'u başlatmadan önce komutun kurulu olduğundan emin olun ; Debian ve Ubuntu altında, poppler-utilspakette, Suse'u bilmiyorum.

Veya dosyaları doğrudan metne dönüştürebilir ve aşağıdaki komutlarla metin dosyalarında grep kullanabilirsiniz.

find -name '* .pdf' -exec pdftotext {} \;
grep -r --incir '* .txt' -l -F "tam olarak aranacak kelime öbeği"
grep -r --include '* .txt' -l -E "aranacak normal ifade"

adobe tüm bir dizinin altında arama yapmaya izin vermez, bunu sadece bir dosyanın içinde yapar. Önce komut satırı araçlarını bilmek istiyorum ve eğer GUI araçları varsa, o zaman da güzel olacak
iceman

Linux altındaki Adobe Reader 9, bir dizindeki tüm PDF dosyalarında arama yapmanızı sağlayan bir "Düzenle | Ara" menü girişine sahiptir. Komut satırında, farkında olduğum tüm yöntemler bir adım içerir pdftotext(Recoll gibi araçlar otomatik olarak yapılacaktır).
Gilles 'SO- kötü olmayı bırak

1
Recoll için +1. Çok dizin varsa ve sık sık ararsanız, dosyaları endekslemek zamandan tasarruf edecektir.
Mekanik salyangoz

1

Adobe Reader X işi yapar ve yalnızca bir dosyanın içinde değil, aynı zamanda bir komut satırı programı değil de tüm dizin ve alt dizinlerde arama yapılmasına izin verir.


Acrobat X'in en son sürümünde mi? hangi sürüm?
iceman

Acrobat indeksleme aracını denedim ve ilkel olarak adlandırmak bir iltifat. recolldebian'a kolayca yüklendi, şimdi Windows tabanlı çalışanlarım için kullanılabilir hale getirmeye çalışıyor.
Chris K

0

Ana dizininizde PDF dosya uzantısına sahip olan ve [iI]n Haskellörneğin regex ile eşleşen bir satır içeren tüm dosyaları yinelemeli olarak listelemek için aşağıdakileri yapabilirsiniz:

find ~/ -regextype posix-extended -regex '.*\.pdf' -execdir sh -c 'pdftotext "$0" - | grep -El --label="$PWD${0#?}" "$1"' {} '[iI]n Haskell' \;

Uyarılar:

  • Bu örneğin özellikle gerekli olmasa da, ben kullanımından kaçınarak bu inşa ettik -execya xargs, çünkü güvenlik nedeniyle , onun 'için iyi bir uygulama bunu yaparken alışkanlığı içine almak için düşünüyorum. ' -execdir' ' -exec' Ve ' $PWD${0#?}' ' ' olarak değiştirmek $0bu durumda aynı sonucu elde etmelidir.
  • Dosya adlarını kalıpla eşleştirmek için glob kullanmak yerine, düzenli ifadelerin daha fazla ifade gücünü kullanmak ve tüm yol boyunca kalıp eşleşmesi kullanmak yararlı olabilir . Nasıl yapılabileceğini göstermek için uygulamayı buraya dahil ettim. Desenle eşleşen yolun normalde yazdırılacak yol olduğunu unutmayın. Göreli veya mutlak olup olmadığı, geçerli çalışma dizinine (' ./') varsayılan olarak gönderilirse verilen yol bağımsız değişkenlerine bağlıdır . Bu örnekte, eşleştirilen yolların tümü mutlaktır (yani ' /' ile başlar ) çünkü ' ~/' geçerli kullanıcının ana dizininin mutlak yoluna genişletilir ve tek yol bağımsız değişkenidir.
  • ' $0' Ve ' $1', argümanları doğru şekilde tırnak içine alacak şekilde kullanılan konumsal parametrelerdir. Bu doğru şekilde yapılmazsa, komut rastgele dosya adlarına karşı savunmasızdır.
  • ' ${0#?}' ifadesinin ilk karakterini $0, yani ' .' karakterini dizer .

Dosya adının izlediği her eşleşen satırı yazdırmak için:

find ~/ -regextype posix-extended -regex '.*\.pdf' -execdir bash -c 'pdftotext "$0" - | grep -EH --label="${0:2}" "$1"' {} '[iI]n Haskell' \;

Bu varyant, ' -H' yerine ' ' kullanır -lve dosyayolu yerine dosya adına sahip etiketler kullanır . ' ${0:2}' ifadesinin ilk iki karakterini $0, yani ' ./' işaretlerini kaldırır, ancak görünüşe göre tarafından tanınmıyor sh.

Tabii ki, ihtiyaçlarınıza göre ayarlayın.

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.