Bir dizindeki / alt dizindeki PDF dosyalarının içeriğini nasıl arayabilirim? Bazı komut satırı araçları arıyorum. Görünüşe göre grep
PDF dosyalarını arayamıyor.
Bir dizindeki / alt dizindeki PDF dosyalarının içeriğini nasıl arayabilirim? Bazı komut satırı araçları arıyorum. Görünüşe göre grep
PDF dosyalarını arayamıyor.
Yanıtlar:
Dağıtımınız şu adla bir yardımcı program sağlamalıdır pdftotext
:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
"-" dosyalara değil, stdout'a pdftotext çıktısı almak için gereklidir. --with-filename
Ve --label=
seçenekler grep çıkışında dosya adını koyacağız. İsteğe bağlı --color
bayrak güzeldir ve grep'e terminaldeki renkleri kullanarak çıktı vermesini söyler.
(Ubuntu'da, pdftotext
paket xpdf-utils
veya tarafından sağlanır poppler-utils
.)
Bu yöntem kullanılarak pdftotext
ve grep
üzerinde bir avantaja sahiptir pdfgrep
Eğer GNU özelliklerini kullanmak istiyorsanız desteklemez. Not : pdfgrep-1.3.x , bağlam satırını yazdırma seçeneğini destekler .grep
pdfgrep
-C
grep
Yazdırdığınız dosya adlarını filtrelediği için yaptığınız "(-kp- ile düzenle)" düzenlemesi çalışmaz .
pdfgrep
çözüm gerçekten hızlı ve basit aramalar için iyi olsa da , çoğu zaman bir bağlam elde etmek istiyorum, çünkü tek bir satır yeterince yardımcı olmayacak - bu yanıta eklediğim gibi: Örneğin, "kalıbınızdan" önceki -C5 seçeneği çıktıya 5 bağlam satırı ekler - pdfgrep bunu desteklemez
pdfgrep
işe yaramazsa, işleyemediği dosyalarda muazzam miktarda çöp rapor ediyor. Öte yandan çözümünüz yardımcı oldu. Bu yüzden lütfen silmeyin, 3 yıl sonra bile yine de yardımcı olur!
Tam olarak adından da anlaşılacağı gibi pdfgrep var .
pdfgrep -R 'a pattern to search recursively from path' /some/path
Basit aramalar için kullandım ve iyi çalıştı.
(Debian, Ubuntu ve Fedora'da paketler var.)
Sürüm 1.3.0 beri pdfgrep özyinelemeli aramayı destekler. Bu sürüm Ubuntu'da kullanılabilir. Ubuntu 12.10 (Quantal).
pdfgrep
şimdi -R
sembolik işaretleri takip etmek de dahil olmak üzere özyineleme seçeneğine sahip
Recoll , PDF dahil onlarca farklı formatı destekleyen Unix / Linux için harika bir tam metin GUI arama uygulamasıdır. Sorgunun tam sayfa numarasını ve arama terimini belge görüntüleyiciye bile aktarabilir ve böylece sonuca doğrudan GUI'sinden atlamanıza olanak tanır.
Recoll ayrıca uygun bir komut satırı arayüzü ve bir web tarayıcı arayüzü ile birlikte gelir .
recoll / xapian
Bu komut satırında (GUI olmayan) nasıl görünür ? Teşekkürler!
recoll
Kullanım kılavuzu ... bazı işaretçiler içerebilir, fakat teklifler oldukça teknik ve "konu dışı" okuma
pwd
ext: pdf 'nöro *' - stackoverflow pwd çevresindeki backticks yedi.
Bu yıkıcı küçük senaryoyu yaptım . Onunla eğlenin.
function pdfsearch()
{
find . -iname '*.pdf' | while read filename
do
#echo -e "\033[34;1m// === PDF Document:\033[33;1m $filename\033[0m"
pdftotext -q -enc ASCII7 "$filename" "$filename."; grep -s -H --color=always -i $1 "$filename."
# remove it! rm -f "$filename."
done
}
$filename.
onu içine almalısın grep
.
@ Sjr'ın cevabını seviyorum ama xargs vs -exec'i tercih ediyorum. Xargs'ı daha çok yönlü buluyorum. Örneğin -P ile bunu yapmak mantıklı olduğunda birden fazla CPU'dan yararlanabiliriz.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs
'paralel işleme yeteneği' hakkında ilginç bir nokta . Senin o Not --label
seçeneği-argüman olacak anlamıyla {}
çünkü grep
komut artık bağlamında yürütülür find
's exec
.
Ben de aynı sorunu vardı ve böylece bir dizede belirtilen klasördeki tüm pdf dosyalarını arar ve sorgu dizesi ile eşleşen PDF dosyalarını yazdırır bir komut dosyası yazdı.
Belki bu size yardımcı olacaktır.
Buradan indirebilirsiniz
pdfgrep
çözüm veya sjr'ın tek astarından çok daha yavaş çıkıyor ve beni sonlandırmak için bile Ctrl-C sonra% 100 CPU iş parçacığı kullanarak devam eden bir işlemle bıraktı.
Pdftotext ile dosya adlarını görmek istiyorsanız aşağıdaki komutu kullanın:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
Ripgrep'i temel alan ripgrep -all adında başka bir yardımcı program daha vardır .
Office belgeleri ve filmler gibi PDF belgelerinden daha fazlasını işleyebilir ve yazar bunun daha hızlı olduğunu iddia eder pdfgrep
.
Geçerli dizini özyinelemeli olarak aramak için komut sözdizimi ve ikincisi yalnızca PDF dosyalarıyla sınırlanır:
rga 'pattern' .
rga --type pdf 'pattern' .
PDF dosyalarında arama yapan açık kaynaklı bir ortak kaynak grep aracı crgrep , aynı zamanda arşivlerde iç içe geçmiş içerik, veritabanı tabloları, görüntü meta verileri, POM dosya bağımlılıkları ve web kaynakları - ve bunların yinelemeli arama dahil kombinasyonları.
Dosyalar sekmesinin altındaki tam açıklama, aracın desteklediğini hemen hemen kapsar.
Bir açık kaynak aracı olarak crgrep geliştirdim.
Öncelikle tüm pdf dosyalarınızı metin dosyalarına dönüştürün:
for file in *.pdf;do pdftotext "$file"; done
Sonra grep
normal olarak kullanın . Bu, özellikle birden fazla sorgunuz ve çok sayıda PDF dosyanız olduğunda hızlı olduğu için iyidir.
ag
github.com/ggreer/the_silver_searcher ile birlikte yapıldığında . Psychedeliks Gb'de mikrosaniye ile ayrıştırılabilir. Yaşam için düz dosyalar
Önce pdf'nizi bir metin dosyasına dönüştürmek ve sonra metnin içinde arama yapmak için pdf2text gibi bazı araçlara ihtiyacınız vardır. (Muhtemelen bazı bilgileri veya sembolleri özleyeceksiniz).
Bir programlama dili kullanıyorsanız, muhtemelen bu amaçla yazılmış pdf kütüphaneleri vardır. ör . Perl için http://search.cpan.org/dist/CAM-PDF/