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ı?
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ı?
Yanıtlar:
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); }'
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. pdftotext
Recoll'u başlatmadan önce komutun kurulu olduğundan emin olun ; Debian ve Ubuntu altında, poppler-utils
pakette, 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"
pdftotext
(Recoll gibi araçlar otomatik olarak yapılacaktır).
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.
recoll
debian'a kolayca yüklendi, şimdi Windows tabanlı çalışanlarım için kullanılabilir hale getirmeye çalışıyor.
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:
-exec
ya 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 $0
bu durumda aynı sonucu elde etmelidir../
') 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 -l
ve 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.