จะเปลี่ยนชื่อไฟล์เป็นหมายเลขลำดับที่เพิ่มขึ้นแบบ monotonically ตามด้วยคำต่อท้ายได้อย่างไร?


0

ฉันต้องการเปลี่ยนชื่อไฟล์ทั้งหมดภายใต้ไดเรกทอรีเฉพาะเป็นตัวเลขตามด้วยคำต่อท้าย ตัวอย่างเช่นฉันต้องการเปลี่ยนชื่อไฟล์ * .jpg ทั้งหมดเป็น 1.jpg, 2.jpg, 3.jpg, ...

ฉันคิดเกี่ยวกับการใช้findสิ่งนี้ (คล้ายfind ./*.jpg --exec mv {} <number_of_iteration>.jpg) แต่ฉันไม่รู้ว่าฉันจะใส่<number_of_iteration>อะไร

ฉันสามารถใช้findทำสิ่งนี้ได้หรือไม่? หรือมีวิธีที่ดีกว่า


สวัสดี Gabrijel ฉันเปลี่ยนคำถามของคุณเพื่อมุ่งเน้นไปที่ปัญหาที่คุณดูเหมือนจะต้องการที่จะแก้ปัญหามากกว่าที่จะนำเสนอวิธีการแก้ปัญหาของคุณซึ่งอาจจะใช่หรือไม่ใช่วิธีที่ดีที่สุด หากคุณรู้สึกว่าในการทำเช่นนั้นฉันเปลี่ยนความตั้งใจของคุณอย่าลังเลที่จะแก้ไขเพิ่มเติม (แนะนำ) หรือย้อนกลับการแก้ไขทั้งหมด (คลิกที่ลิงก์ "แก้ไข ... ที่ผ่านมา" ด้านบนชื่อของฉันและคลิก "ย้อนกลับ" ด้านบนการแก้ไข คุณต้องการย้อนกลับไป)
CVN

คำตอบ:


1

คุณจะต้องรักษาการวนซ้ำแยกต่างหาก ตัวอย่างเช่นใช้สคริปต์move_countที่มีดังต่อไปนี้: -

[ -w ~/MoveCount ] || echo 0 >~/MoveCount
read count <~/MoveCount
((++count))
echo $count >~/MoveCount
mv "$1" "$count.${1##*.}"

จากนั้นfindคำสั่งของคุณจะกลายเป็น:

find -iname "*.jpg" -exec bash -c "move_count {}" \;

โปรดทราบว่าbashมีการเรียกอย่างชัดเจนเนื่องจากค่าเริ่มต้นshไม่เข้าใจไวยากรณ์ที่ฉันใช้ อีกทางเลือกหนึ่งให้บรรทัดแรกของ#!/bin/bashmove_count


คุณไม่สามารถเพียงแค่ใส่#!/bin/bashที่ด้านบนและทำไปด้วยbash -cในได้อย่างง่ายดาย-exec?
CVn

ใช่แน่นอน ฉันคุ้นเคยกับการใช้bash -cหลังจากก่อนหน้านี้ฉันมีปัญหาอื่นเกี่ยวกับการใช้find -execกับแฟ้มแบตช์ ฉันจำรายละเอียดไม่ได้ค่อนข้างมาก แต่มันอาจเกี่ยวข้องกับการที่พารามิเตอร์ถูกขยายและนั่นไม่ได้ใช้ที่นี่
AFH

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