การย้ายไฟล์ PDF ด้วยสายอักขระและพิมพ์ ok หรือไม่พบในทุกการค้นหาไฟล์


-1

ฉันใช้คำสั่งต่อไปนี้กับ pdf เพื่อค้นหาสตริงเฉพาะในไฟล์ pdf หลายไฟล์และย้ายไปยังไดเรกทอรีเป้าหมายหากมีการแข่งขัน:

pdfgrep -H "DESIRE STRING" TARGET/* | grep --ignore-case --perl-regexp --only-matching '.*(.PDF)'| uniq | xargs -I{} mv -i {} DESTINATION/

ฉันต้องการพิมพ์ตกลงหากพบคู่ที่ตรงกันหรือไม่พบถ้าไม่มีคู่ที่ตรงกัน เป็นไปได้หรือไม่ที่จะรวมสิ่งนี้ไว้ในบรรทัดคำสั่ง?

ขอบคุณ

คำตอบ:


1

มีเหตุผลที่คุณพยายามทำสิ่งนี้ในคำสั่งแบบหนึ่งซับหรือไม่? มันซับซ้อนพอที่จะจัดการได้ง่ายกว่าในฐานะเชลล์สคริปต์ขนาดเล็ก แต่ถ้าคุณต้องการหนึ่งซับนี่คือตัวอย่างที่โดยทั่วไปคือ bash loop ที่เรียกใช้ pdfgrep ตามตัวอย่างของคุณ:

while read line; do file=$(echo $line|awk -F: '{print $1}');printf "$file: "; echo "$line"|grep -q :0$ && echo no match && continue;echo MATCH;mv -i "$file" DESTINATION/;done < <(find TARGET/ -type f -iname '*.pdf' -exec pdfgrep -Hc -m 1 "DESIRE STRING" {} \;)

โปรดทราบว่า pdfgrep ใช้ตัวเลือก "-c" เพื่อตรวจสอบว่าข้อความนั้นอยู่ในไฟล์ PDF หรือไม่ จะใช้ตัวเลือก "-m 1" เพื่อหยุดหลังจากการแข่งขันครั้งแรกดังนั้นในทางทฤษฎีควรทำงานได้เร็วขึ้นในไฟล์ขนาดใหญ่

หาก pdfgrep ของคุณไม่รองรับตัวเลือก "-m 1" ให้ปล่อยบิตนั้นทิ้ง

และเพื่อให้อ่านง่ายขึ้นนี่คือรหัสที่อาจปรากฏในสคริปต์ทุบตี:

#!/bin/bash
while read line; do
  file=$(echo $line|awk -F: '{print $1}')
  printf "$file: "
  echo "$line"|grep -q :0$ && echo no match && continue
  echo MATCH
  mv -i "$file" DESTINATION/
done < <(find TARGET/ -type f -iname '*.pdf' -exec pdfgrep -Hc "DESIRE STRING" {} \;)

คำอธิบายรหัสทีละบรรทัด:

  1. นี่คือล่ามบรรทัดคำสั่ง หากสคริปต์นั้นสามารถเรียกใช้งานได้ (คุณสามารถทำให้สามารถเรียกใช้งานได้ด้วยคำสั่ง "chmod + x mv-pdf-files.sh") คุณสามารถเรียกใช้งานได้เช่น "./mv-pdf-files.sh" และมันจะใช้ / bin / bash เพื่อเรียกใช้สคริปต์

  2. นี่คือการทุบตีในขณะที่วง มันวนซ้ำทุกบรรทัดของเอาต์พุตที่สร้างโดยคำสั่งที่ส่วนท้ายสุดของสคริปต์ (คำสั่ง "find")

  3. สิ่งนี้จะดึงชื่อไฟล์จากบรรทัดเอาต์พุตและบันทึกลงในตัวแปร (ชื่อ "ไฟล์")

  4. สิ่งนี้จะพิมพ์ชื่อไฟล์ไปที่เอาต์พุตมาตรฐานโดยไม่มีบรรทัดใหม่ที่ท้าย

  5. คำสั่ง grep นี้ค้นหา ": 0" ที่ท้ายบรรทัดซึ่งระบุว่าพบรายการที่ตรงกันของ STRING ใน PDF นั้น คำสั่ง && ถูกรวมเข้าด้วยกัน; ดังนั้นหากไม่พบที่ตรงกันคำสั่ง echo จะถูกเรียกใช้จากนั้นจะเรียก bash "ดำเนินการต่อ" ซึ่งข้ามไปยังไฟล์ถัดไปในลูป (เช่นกลับไปที่บรรทัดรหัส # 3)

  6. นี่เป็นเพียงเสียงสะท้อนที่พบการแข่งขัน

  7. นี่คือคำสั่ง mv จริงเช่นเดียวกับในรหัสของคุณ

  8. "เสร็จสิ้น" หมายถึงจุดสิ้นสุดของ while loop คำสั่ง "find" ที่อยู่ในเครื่องหมาย <<() คือสิ่งที่ while while วนซ้ำ คำสั่ง find นั้นจะค้นหาไฟล์ทั้งหมดในพา ธ ที่ระบุ (TARGET /) ที่ลงท้ายด้วย. pdf (ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) พารามิเตอร์ -exec บอกให้ find รันคำสั่ง "pdfgrep" ในแต่ละไฟล์โดยใช้ -H เพื่อพิมพ์ชื่อไฟล์และ "-c" เพื่อพิมพ์จำนวนการจับคู่ของ STRING ที่พบในไฟล์ PDF อักขระ {} ที่ท้ายถูกใช้ภายในโดย "find" เพื่อแทนชื่อไฟล์เป็นตัวแปร


ไม่ฉันสามารถใช้สคริปต์ทุบตีฉันไม่ทราบว่าฮ่าฮ่าฮ่า
FXux

ฉันเห็น 'ตัวเลือกไม่ถูกต้อง -m' ใน pdfgrep นอกจากนี้หากฉันไม่ได้ขออะไรมากคุณสามารถอธิบายบรรทัดคำสั่งได้หรือไม่
FXux

@atreyu ทำงานไม่ถูกต้องกำลังย้ายไฟล์ที่ไม่มีสตริงอยู่ภายใน: /
FXux

อ่าคุณมีไฟล์ PDF ที่เก่ากว่าฉันเดา ฉันพบเครื่องจักรของฉันด้วยรุ่นเก่าเช่นกัน ความผิดของฉันไม่รวมถึงการตรวจสอบข้อผิดพลาด เพียงแค่ออกจากตัวเลือก "-m 1" และมันควรจะทำงาน อัปเดตคำตอบเพื่อแสดงคำสั่งในรูปแบบสคริปต์ เพียงแค่เปิดโปรแกรมแก้ไขข้อความและบันทึกรหัสลงในไฟล์ ("mv-pdf-files.sh" เป็นต้น) จากนั้นเรียกมันว่า: "sh mv-pdf-files.sh" คุณสามารถรับแฟนซีและส่งผ่าน src / dest dirs เป็น args ไปยังสคริปต์และส่งสตริงเพื่อค้นหาเป็น arg เช่นกัน
atreyu

โอ้มนุษย์กำลังทำงาน <3 หากฉันไม่ได้ขออะไรมากคุณช่วยอธิบายสคริปต์ได้ไหม ฉันชอบทุบตี แต่ฉันไม่มีเวลามากพอที่จะเรียนรู้อย่างน้อยในปีนี้
FXux
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.