ฉันจะค้นหาเนื้อหาของไฟล์ 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
คู่มือผู้ใช้อาจมีคำแนะนำบางส่วน แต่ข้อเสนอทางเทคนิคมากกว่าและ "ปิดหัวข้อ" อ่านแล้ว ...
pwd
ext: 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' ในสคริปต์อย่างง่ายเหมือนกับที่กล่าวมาข้างต้น