Daily Tips : การเปลี่ยนชื่อไฟล์พร้อมกันที่ละหลายๆ ไฟล์
วันนี้พี่ที่บริษัทโทรมาเพราะมีปัญหาแตกไฟล์ที่ archive ไว้ไม่ได้เพราะติดปัญหาชื่อไฟล์มีเครื่องหมายโคลอน ” : ” อยู่ในไฟล์ด้วย เพราะ shell script ที่ผมเขียนไว้ให้ archive ไฟล์ตั้งให้มันสร้างชื่อไฟล์เป็นชั่วโมงและแสดงนาทีโดยผมเลือกใช้ ” : ” กั้นระหว่างหน่วยชั่วโมงและนาที ผมลอง ssh เข้าไปดูแล้วก็พบว่ามีไฟล์เยอะมากครั้นจะนั่ง rename ทีละไฟล์ก็คงลำบากแน่ๆ ก็เลย เข้า google แล้ว search วิธีการ rename ไฟล์ที่ละหลายๆ ไฟล์ก็ไปเจออยู่ที่ http://www.cyberciti.biz/tips/renaming-multiple-files-at-a-shell-prompt.html ทำตามเสร็จก็เลยคิดว่าเอามาเขียนไว้กันลืมด้วยดีกว่า
สมมติว่าผมมีไฟล์ file_XX:xx.txt อยู่ ซึ่งผมสร้างมาโดยคำสั่ง touch
mrgill@mrgill-laptop:~/lab_command$ ls file_15:35.txt file_16:30.txt file_18:55.txt
ถ้าหากผมใช้คำสั่ง rename หรือ mv ในการเปลี่ยนชื่อไฟล์ file_XX:xx.txt ให้เป็น file_XX_xx.txt ก็คงต้องทำ 3 ครั้ง แต่ด้วยวิธีต่อไปนี้เราสามารถเปลี่ยนชื่อไฟล์ทั้งหมดให้เป็น file_XX_xx.txt ได้ในคำสั่งเดียว โดย
mrgill@mrgill-laptop:~/lab_command$ rename "s/\:/_/g" *.txt
เมื่อ ” \: ” คือสิ่งที่เราต้องการจะเปลี่ยน และ ” _ ” คือสิ่งที่เราจะเอามาแทน ” : ” และ *.txt คือนามสุกลของไฟล์ที่เราต้องการจะเปลี่ยน
ผลที่ได้คือ
mrgill@mrgill-laptop:~/lab_command$ ls file_15_35.txt file_16_30.txt file_18_55.txt
ลองนำไปประยุกต์ใช้กันดู
6 Comments March 23, 2010


