คำสั่ง bash สำหรับแต่ละไฟล์ในโฟลเดอร์


31

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

ขณะนี้ฉันกำลังเปลี่ยนชื่อ /my/data/Andrew.doc เป็น /my/data/Andrew.txt ฉันต้องการทำเช่นนี้กับไฟล์. doc ทั้งหมดจากโฟลเดอร์ / my / data / และเพื่อคงชื่อไว้

ฉันลองหลายรุ่นแล้ว แต่ฉันคิดว่าฉันมีบางอย่างผิดปกติในไวยากรณ์เนื่องจากฉันใหม่กับ linux


→ตัวอย่าง & การปฏิบัติที่สมบูรณ์ยิ่งขึ้นเล็กน้อย: stackoverflow.com/a/43474757/444255
Frank Nocke

คำตอบ:


76

มีอย่างน้อยหนึ่งแสนล้านวิธีที่แตกต่างของการเข้าหานี้ แต่นี่คือผู้เข้าชิงอันดับต้น ๆ :

Bash for loop

for f in ./*.doc; do
    # do some stuff here with "$f"
    # remember to quote it or spaces may misbehave
done

การใช้ find

findคำสั่งมีเล็ก ๆ น้อย ๆ ที่น่ารักexecคำสั่งที่ดีสำหรับการทำงานสิ่งที่ (มีบางประการ) การค้นหาดีกว่าการหมุนแบบพื้นฐานเพราะคุณสามารถกรองไฟล์ที่คุณเลือกได้ ระวังไวยากรณ์ที่ผิดปกติ

find . -iname '*.doc' -exec echo "File is {}" \;

โปรดทราบว่าfindจะเรียกซ้ำดังนั้นคุณอาจต้องการใช้-maxdepth 1เพื่อเก็บไว้findในไดเรกทอรีการทำงานปัจจุบัน -type fสามารถใช้เพื่อกรองไฟล์ปกติ

หากเราเพิ่งเปลี่ยนชื่อ doc เป็น txt ...

renameคำสั่ง sed เหมือนในการค้นหา เห็นได้ชัดว่านี่จะไม่ทำอะไรเลยในการแปลงรูปแบบ

rename 's/doc$/txt/' *.doc

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