การเปลี่ยนชื่อ pdf ตาม linux เนื้อหาของบรรทัด


1

ฉันกำลังพยายามเปลี่ยนชื่อไฟล์ PDF เป็นจำนวนมากโดยอ้างอิงจากบรรทัดที่ระบุในไฟล์

จนถึงตอนนี้ฉันเปลี่ยนเป็นข้อความแล้วใช้ awk เพื่อพิมพ์บรรทัดที่ 41 แต่นั่นก็เท่าที่ฉันมี

ฉันได้ลองใช้ xargs เพื่อส่งเอาต์พุต awk ไปยังคำสั่ง mv แต่ไม่มีลูกเต๋าจนถึงปัจจุบัน

ฉันรู้ว่าฉันอาจจะทำผิดแบบนี้ แต่ถ้าต่อไปจะสามารถส่องแสงฉันจะขอบคุณมันจริงๆ

ฉันพยายามทำสิ่งนี้โดยไม่ทุบตีเพื่อที่ฉันจะได้สร้างนามแฝงของมันขึ้นมา

ls *.pdf | xargs -n1 mv `ls *.pdf | xargs -n1 pdftotext; ls page_*.txt | xargs -n1 awk 'NR==41'`.txt'

คำตอบ:


2

คุณมีหลายตัวเลือกให้เลือก คุณสามารถเขียนฟังก์ชันเพื่อทำสิ่งนี้หรือคุณสามารถเขียนเชลล์สคริปต์ (bash) ซึ่งคุณสามารถใช้ภายในนามแฝงได้ และแน่นอนคุณสามารถลองเขียนหนึ่งซับเพื่อทำเวทย์มนตร์

ฉันคิดว่าคำสั่งในโครงสร้างต่อไปนี้ (เป็นหนึ่งซับ):

for pdf in *.pdf; do pdftotext "${pdf}"; filename=`basename -s .pdf "${pdf}"`; newname=`awk 'NR==41' "${filename}.txt"`; mv "${pdf}" "${newname}"; done;`

ซึ่งสามารถปรับโครงสร้างเป็น:

for pdf in *.pdf
do
    pdftotext "${pdf}"
    filename=`basename -s .pdf "${pdf}"`
    newname=`awk 'NR==41' "${filename}.txt"`
    mv "${pdf}" "${newname}"
done

ไฟล์นี้สามารถบันทึกเป็นเชลล์สคริปต์และเพิ่มในรายการชื่อแทนภายใต้ชื่อที่คุณต้องการ


สวัสดีขอบคุณสำหรับคำตอบของคุณ มันดูใกล้จริงๆ ฉันได้รับข้อผิดพลาดซึ่งฉันคิดว่าเกี่ยวข้องกับ basename -s ---- basename: ตัวเลือกที่ไม่ถูกต้อง - 'ลองbasename --help' for more information. awk: cmd. line:1: fatal: cannot open file . txt' เพื่ออ่าน (ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว) mv: ไม่สามารถย้ายได้page_01.pdf' to ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว
byrnec25

1
ขออภัยฉันไม่ดีฉันลืม backticks สิ้นสุดในชื่อไฟล์และบรรทัดชื่อใหม่ นอกจากนี้ฉันมี basename เวอร์ชัน 8.21
Lambert

หากคุณไม่มี -s ในชื่อไฟล์เบสของคุณคุณสามารถลองแทนที่บรรทัดด้วย: `filename =" $ {pdf :: - 4} "ซึ่งจะแทนที่อักขระสี่ตัวสุดท้าย (.pdf) จากชื่อไฟล์ PDF
Lambert

ขอบคุณฉันทำให้มันทำงานโดยใช้ชื่อไฟล์ "$ {pdf}" ".pdf" ดูเหมือนว่าจะใช้งานได้สำหรับฉัน ขอบคุณอีกครั้ง.
byrnec25
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.