Bagaimana saya bisa mencari konten file PDF dalam direktori / subdirektori? Saya mencari beberapa alat baris perintah. Tampaknya grep
tidak dapat mencari file PDF.
Bagaimana saya bisa mencari konten file PDF dalam direktori / subdirektori? Saya mencari beberapa alat baris perintah. Tampaknya grep
tidak dapat mencari file PDF.
Jawaban:
Distribusi Anda harus menyediakan utilitas yang disebut pdftotext
:
find /path -name '*.pdf' -exec sh -c 'pdftotext "{}" - | grep --with-filename --label="{}" --color "your pattern"' \;
"-" diperlukan untuk memiliki keluaran pdftotext ke stdout, bukan ke file. The --with-filename
dan --label=
pilihan akan menempatkan nama file dalam output dari grep. --color
Bendera opsional bagus dan memberi tahu grep untuk keluaran menggunakan warna pada terminal.
(Di Ubuntu, pdftotext
disediakan oleh paket xpdf-utils
atau poppler-utils
.)
Metode ini, menggunakan pdftotext
dan grep
, memiliki keunggulan dibandingkan pdfgrep
jika Anda ingin menggunakan fitur-fitur GNU grep
yang pdfgrep
tidak mendukung. Catatan : pdfgrep-1.3.x mendukung -C
opsi untuk mencetak garis konteks.
grep
memfilter nama file yang dicetak.
pdfgrep
solusi yang baik untuk benar-benar cepat dan pencarian sederhana, sering saya ingin mendapatkan beberapa konteks, sebagai satu baris tidak akan cukup membantu - sehingga saya ditambahkan ke jawaban ini: Misalnya, Anda dapat menambahkan opsi -C5 sebelum "pola Anda" untuk memasukkan 5 baris konteks ke output - pdfgrep tidak mendukung ini
pdfgrep
tidak berguna, ia melaporkan sejumlah besar sampah pada file yang tidak dapat ditangani. Solusi Anda di sisi lain membantu. Jadi tolong jangan menghapusnya, bahkan setelah 3 tahun masih membantu!
Ada pdfgrep , yang melakukan persis seperti namanya.
pdfgrep -R 'a pattern to search recursively from path' /some/path
Saya telah menggunakannya untuk pencarian sederhana dan bekerja dengan baik.
(Ada paket di Debian, Ubuntu dan Fedora.)
Karena versi 1.3.0 pdfgrep mendukung pencarian rekursif. Versi ini tersedia di Ubuntu sejak Ubuntu 12.10 (Quantal).
pdfgrep
sekarang memiliki opsi rekursi, termasuk -R
juga mengikuti symlink
Recoll adalah aplikasi pencarian GUI teks lengkap yang fantastis untuk Unix / Linux yang mendukung puluhan format berbeda, termasuk PDF. Ia bahkan dapat mengirimkan nomor halaman dan istilah pencarian yang tepat dari query ke penampil dokumen dan dengan demikian memungkinkan Anda untuk melompat ke hasil langsung dari GUI-nya.
Recoll juga dilengkapi dengan antarmuka baris perintah yang layak dan antarmuka browser web .
recoll / xapian
di baris perintah (non-GUI)? Terima kasih!
recoll
manual user mungkin berisi beberapa petunjuk, tapi menawarkan agak teknis dan "off-topik" membaca ...
pwd
ext: pdf 'neuro *' - stackoverflow memakan backticks di sekitar pwd.
Saya membuat skrip kecil yang merusak ini . Bersenang-senanglah dengan itu.
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.
Anda harus menyalurkannya ke grep
.
Saya suka jawaban @ sjr namun saya lebih suka xargs vs -exec. Saya menemukan xargs lebih fleksibel. Sebagai contoh dengan -P kita dapat memanfaatkan banyak CPU ketika masuk akal untuk melakukannya.
find . -name '*.pdf' | xargs -P 5 -I % pdftotext % - | grep --with-filename --label="{}" --color "pattern"
xargs
kemampuan pemrosesan paralel. Perhatikan bahwa --label
argumen-opsi Anda akan secara harfiah {}
, karena grep
perintah sekarang tidak lagi dieksekusi dalam konteks find
's exec
.
Saya memiliki masalah yang sama dan karenanya saya menulis sebuah skrip yang mencari semua file pdf dalam folder yang ditentukan untuk sebuah string dan mencetak file PDF yang cocok dengan string kueri.
Mungkin ini akan membantu Anda.
Anda dapat mengunduhnya di sini
pdfgrep
solusi atau sjr's one-liner, dan itu meninggalkan saya dengan proses yang sedang berlangsung menggunakan 100% dari thread CPU bahkan setelah saya Ctrl-C untuk menghentikannya.
Jika Anda ingin melihat nama file dengan pdftotext, gunakan perintah berikut:
find . -name '*.pdf' -exec echo {} \; -exec pdftotext {} - \; | grep "pattern\|pdf"
Ada utilitas lain yang disebut ripgrep-all , yang didasarkan pada ripgrep .
Ia dapat menangani lebih dari sekadar dokumen PDF, seperti dokumen dan film Office, dan penulis mengklaim lebih cepat dari itu pdfgrep
.
Perintah sintaks untuk mencari direktori saat ini secara rekursif, dan yang kedua hanya terbatas pada file PDF:
rga 'pattern' .
rga --type pdf 'pattern' .
Ada sumber terbuka grep alat sumber daya umum grgrep yang mencari dalam file PDF tetapi juga sumber daya lain seperti konten yang bersarang di arsip, tabel database, meta-data gambar, dependensi file POM dan sumber daya web - dan kombinasi dari ini termasuk pencarian rekursif.
Deskripsi lengkap di bawah tab File cukup banyak mencakup apa yang didukung alat ini.
Saya mengembangkan crgrep sebagai alat opensource.
Konversi dulu semua file pdf Anda ke file teks:
for file in *.pdf;do pdftotext "$file"; done
Kemudian gunakan grep
seperti biasa. Ini sangat baik karena cepat ketika Anda memiliki banyak pertanyaan dan banyak file PDF.
ag
github.com/ggreer/the_silver_searcher . Mampu mengurai di psychedeliks Gb dengan mikrodetik. File flat seumur hidup
Anda memerlukan beberapa alat seperti pdf2text untuk mengkonversi pdf Anda menjadi file teks dan kemudian mencari di dalam teks. (Anda mungkin akan kehilangan beberapa informasi atau simbol).
Jika Anda menggunakan bahasa pemrograman, mungkin ada perpustakaan pdf yang ditulis untuk tujuan ini. misalnya http://search.cpan.org/dist/CAM-PDF/ untuk Perl