แกะไฟล์ทั้งหมดในไดเรกทอรีย่อยและเปลี่ยนชื่อไฟล์หลังจากไดเรกทอรีเดิม [ปิด]


0

ฉันลงเอยในสถานการณ์ที่แปลก ฉันมี 35 โฟลเดอร์ ตัวแรกมีชื่อว่า 1 ตัวที่สองมีชื่อว่า 2 และต่อไปเรื่อย ๆ ในแต่ละโฟลเดอร์มี 4 ไฟล์ '1.png', '2.png', '3.png', '4.png' ในแต่ละโฟลเดอร์เหล่านี้ฉันต้องการเรียกใช้ "แปลง * .png - ผนวก out.pdf" และเปลี่ยนชื่อแต่ละ 'out.pdf' หลังจากไดเรกทอรีดั้งเดิม (เช่น 'out1.pdf' จากโฟลเดอร์แรก) จากนั้นแยกแต่ละไฟล์ออก pdf จากโฟลเดอร์ดั้งเดิม เป็นไปได้ไหม ฉันได้ลองวนรอบ แต่สิ่งที่ฉันพยายามทำดูเหมือนจะไม่เห็นด้วยกับระบบการตั้งชื่อ


1
คุณหมายถึงอะไร "คลายไฟล์ pdf แต่ละไฟล์ออกจากโฟลเดอร์เดิม"
RobertL

1
แสดงรหัสของคุณให้เราทราบและมันจะผิดพลาดตรงไหน
tripleee

คำตอบ:


0

ลองสิ่งนี้:

#!/bin/sh

for dir in $(seq 1 35)
do
    (
         cd $dir || exit 1
         rm -f out$dir.pdf
         for n in 1 2 3 4
         do
             convert $n.png -append out$dir.pdf  || exit 2
         done
    )
done

สคริปต์นี้ POSIX สอดคล้องและไม่จำเป็นต้องดังนั้นbash#!/bin/sh

รหัสระหว่างวงเล็บทำงานใน subshell ดังนั้นcdคำสั่งจะเปลี่ยนเฉพาะไดเรกทอรีจนกว่าจะปิดวงเล็บ การวนซ้ำครั้งถัดไปของลูปจะเริ่มขึ้นในไดเรกทอรีการทำงานดั้งเดิม

ในตัวอย่างของคุณฉันคิดว่าไวยากรณ์สำหรับconvertไม่ถูกต้อง การแปลงใช้ไฟล์อินพุตเพียงไฟล์เดียวและในคำถามดั้งเดิมของคุณไฟล์*.pngจะผ่านไฟล์อินพุตสี่ไฟล์ บางทีนั่นอาจเป็นปัญหาของคุณ


การขาดการอ้างอิงไม่เป็นไปตาม POSIX (หรือตาม Bash อย่างใดอย่างหนึ่ง) ลองshellcheck.netเพื่อวินิจฉัย antipatterns ของเชลล์และข้อผิดพลาดทางไวยากรณ์
tripleee

ทำงานได้ทันทีที่ฉันแทนที่ '$ n.png' ด้วย '* .png'
J. Mini
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.