ฉันจะค้นหาเนื้อหาของไฟล์ PDF ในไดเรกทอรี / ไดเรกทอรีย่อยได้อย่างไร ฉันกำลังมองหาเครื่องมือบรรทัดคำสั่ง ดูเหมือนว่าgrepไม่สามารถค้นหาไฟล์ PDF
ฉันจะค้นหาเนื้อหาของไฟล์ PDF ในไดเรกทอรี / ไดเรกทอรีย่อยได้อย่างไร ฉันกำลังมองหาเครื่องมือบรรทัดคำสั่ง ดูเหมือนว่าgrepไม่สามารถค้นหาไฟล์ PDF
คำตอบ:
การแจกจ่ายของคุณควรมีโปรแกรมอรรถประโยชน์ที่เรียกว่าpdftotext:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
"-" จำเป็นต้องมีเอาต์พุต pdftotext เป็น stdout ไม่ใช่ไฟล์ --with-filenameและ--label=ตัวเลือกที่จะใส่ชื่อแฟ้มในการส่งออกของ grep การ--colorตั้งค่าสถานะเสริมดีและบอก grep ให้ออกโดยใช้สีในอาคาร
(ใน Ubuntu pdftotextให้บริการโดยแพ็คเกจxpdf-utilsหรือpoppler-utils)
วิธีนี้ใช้pdftotextและgrepมีความได้เปรียบมากกว่าpdfgrepหากคุณต้องการใช้คุณสมบัติของ GNU grepที่pdfgrepไม่รองรับ หมายเหตุ : pdfgrep-1.3.x รองรับ-Cตัวเลือกสำหรับการพิมพ์บรรทัดบริบท
grepกรองชื่อไฟล์ที่พิมพ์
                    pdfgrepวิธีแก้ปัญหาเป็นสิ่งที่ดีสำหรับการค้นหาที่ง่ายและรวดเร็วบ่อยครั้งฉันต้องการได้รับบริบทเนื่องจากบรรทัดเดียวจะไม่มีประโยชน์พอ - ดังนั้นเมื่อฉันเพิ่มคำตอบนี้: ตัวอย่างเช่นคุณสามารถเพิ่ม ตัวเลือก -C5 ก่อน "รูปแบบของคุณ" เพื่อรวมบริบท 5 บรรทัดไปยังเอาต์พุต - pdfgrep ไม่รองรับสิ่งนี้
                    pdfgrepไม่มีประโยชน์มันรายงานขยะจำนวนมหาศาลในไฟล์ที่ไม่สามารถจัดการได้ ในทางกลับกันโซลูชันของคุณก็ช่วยได้ ดังนั้นโปรดอย่าลบมันแม้จะผ่านไป 3 ปีก็ยังมีประโยชน์!
                    มีpdfgrepซึ่งทำตามชื่อของมัน
pdfgrep -R 'a pattern to search recursively from path' /some/path
ฉันใช้มันเพื่อการค้นหาง่าย ๆ และใช้งานได้ดี
(มีแพ็คเกจใน Debian, Ubuntu และ Fedora)
ตั้งแต่เวอร์ชั่น 1.3.0 pdfgrepรองรับการค้นหาแบบเรียกซ้ำ รุ่นนี้มีใน Ubuntu ตั้งแต่ Ubuntu 12.10 (Quantal)
pdfgrepมีตัวเลือกการเรียกซ้ำอีกครั้งซึ่งรวมถึง-Rการติดตาม symlinks ด้วย
                    Recollเป็นแอพพลิเคชั่นค้นหาข้อความ GUI แบบเต็มรูปแบบที่ยอดเยี่ยมสำหรับ Unix / Linux ที่รองรับรูปแบบที่หลากหลายรวมถึง PDF มันยังสามารถส่งหมายเลขหน้าและคำค้นหาของแบบสอบถามไปยังโปรแกรมดูเอกสารได้อย่างแม่นยำและทำให้คุณสามารถข้ามไปยังผลลัพธ์ได้ทันทีจาก GUI
Recoll ยังมาพร้อมกับอินเตอร์เฟซบรรทัดคำสั่งที่ทำงานและอินเตอร์เฟซเว็บเบราว์เซอร์
recoll / xapianในบรรทัดคำสั่ง (ไม่ใช่ GUI) ขอบคุณ!
                    recoll คู่มือผู้ใช้อาจมีคำแนะนำบางส่วน แต่ข้อเสนอทางเทคนิคมากกว่าและ "ปิดหัวข้อ" อ่านแล้ว ...
                    pwdext: pdf 'neuro *' - stackoverflow กิน backticks รอบ pwd
                    เวอร์ชันจริงของฉันใน pdfgrep (1.3.0) อนุญาตดังต่อไปนี้:
pdfgrep -HiR 'pattern' /path
เมื่อทำpdfgrep --help:
มันทำงานได้ดีบน Ubuntu ของฉัน
ฉันสร้างสคริปต์ตัวเล็กนี้ที่ทำลายล้างได้ ขอให้สนุกกับมัน
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. grep
                    ฉันชอบคำตอบของ @ sjr แต่ฉันชอบ xargs vs -exec ฉันพบว่า xargs อเนกประสงค์มากขึ้น เช่นกับ -P เราสามารถใช้ประโยชน์จากหลาย ๆ ซีพียูเมื่อมันสมเหตุสมผล
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
              xargsความสามารถในการประมวลผลแบบขนาน โปรดทราบว่าคุณ--labelมีตัวเลือกอาร์กิวเมนต์จะแท้จริง {}เพราะgrepคำสั่งดำเนินการอยู่ในขณะนี้ไม่ได้อยู่ในบริบทของ'sfind exec
                    ฉันมีปัญหาเดียวกันดังนั้นฉันจึงเขียนสคริปต์ซึ่งค้นหาไฟล์ pdf ทั้งหมดในโฟลเดอร์ที่ระบุเพื่อหาสตริงและพิมพ์ไฟล์ PDF ที่ตรงกับสตริงการสืบค้น
บางทีนี่อาจจะเป็นประโยชน์กับคุณ
คุณสามารถดาวน์โหลดได้ ที่นี่
pdfgrepโซลูชันหรือซับไลน์ของ sjr มากและทำให้ฉันใช้กระบวนการต่อเนื่องโดยใช้เธรด CPU 100% แม้ว่าฉันจะกด Ctrl-C เพื่อยุติการทำงานก็ตาม
                    หากคุณต้องการดูชื่อไฟล์ด้วยpdftotext ให้ใช้คำสั่งต่อไปนี้:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf" 
              มียูทิลิตี้อื่นที่เรียกว่าเป็นripgrep ทั้งหมดซึ่งจะขึ้นอยู่กับripgrep
มันสามารถจัดการได้มากกว่าเพียงแค่เอกสาร PDF เช่นเอกสาร Office และภาพยนตร์และผู้เขียนเรียกร้องpdfgrepมันจะเร็วกว่า
ไวยากรณ์คำสั่งสำหรับการค้นหาไดเรกทอรีปัจจุบันซ้ำ ๆ และหนึ่งวินาที จำกัด เฉพาะไฟล์ PDF เท่านั้น:
rga 'pattern' .
rga --type pdf 'pattern' .
              มีเครื่องมือ grep เครื่องมือเปิดแหล่งข้อมูลทั่วไปcrgrepซึ่งค้นหาภายในไฟล์ PDF แต่ยังมีทรัพยากรอื่น ๆ เช่นเนื้อหาที่ซ้อนอยู่ในที่เก็บถาวรตารางฐานข้อมูลเมตาดาต้ารูปภาพการพึ่งพาไฟล์ POM และทรัพยากรเว็บ - และการรวมกันของเหล่านี้รวมถึงการค้นหาแบบเรียกซ้ำ
คำอธิบายแบบเต็มภายใต้แท็บไฟล์จะครอบคลุมสิ่งที่เครื่องมือสนับสนุน
ฉันพัฒนา crgrep เป็นเครื่องมือ opensource
ขั้นแรกให้แปลงไฟล์ pdf ทั้งหมดของคุณเป็นไฟล์ข้อความ:
for file in *.pdf;do pdftotext "$file"; done
จากนั้นใช้grepตามปกติ นี่เป็นสิ่งที่ดีโดยเฉพาะอย่างยิ่งเมื่อคุณมีหลายแบบสอบถามและไฟล์ PDF จำนวนมาก
ag    github.com/ggreer/the_silver_searcher สามารถแยกวิเคราะห์ได้ที่ psychedeliks Gb โดย microseconds ไฟล์แฟลตเพื่อชีวิต
                    คุณต้องใช้เครื่องมือบางอย่างเช่น pdf2text เพื่อแปลงไฟล์ pdf เป็นไฟล์ข้อความก่อนแล้วจึงค้นหาข้อความ (คุณอาจพลาดข้อมูลหรือสัญลักษณ์บางอย่าง)
หากคุณใช้ภาษาการเขียนโปรแกรมอาจมีไลบรารี PDF ที่เขียนขึ้นเพื่อจุดประสงค์นี้ เช่นhttp://search.cpan.org/dist/CAM-PDF/สำหรับ Perl
ลองใช้ 'acroread' ในสคริปต์อย่างง่ายเหมือนกับที่กล่าวมาข้างต้น