เปลี่ยนชื่อ – เครื่องมือบรรทัดคำสั่งสำหรับการเปลี่ยนชื่อไฟล์หลายไฟล์ใน Linux
เรามักจะใช้คำสั่ง “mv” เพื่อเปลี่ยนชื่อไฟล์เดียวใน Linux อย่างไรก็ตาม การเปลี่ยนชื่อไฟล์หลายไฟล์หรือหลายไฟล์อย่างรวดเร็วทำให้การทำงานในเทอร์มินัลเป็นเรื่องยากมาก
Linux มาพร้อมกับเครื่องมือในตัวที่ทรงพลังมากที่เรียกว่า เปลี่ยนชื่อ คำสั่ง เปลี่ยนชื่อ ใช้เพื่อเปลี่ยนชื่อไฟล์หลายไฟล์หรือเป็นกลุ่ม เปลี่ยนชื่อไฟล์เป็นตัวพิมพ์เล็ก เปลี่ยนชื่อไฟล์เป็นตัวพิมพ์ใหญ่ และเขียนทับไฟล์โดยใช้นิพจน์ Perl
คำสั่ง “เปลี่ยนชื่อ” เป็นส่วนหนึ่งของสคริปต์ Perl และอยู่ภายใต้ “/usr/bin/” บน Linux หลายรุ่น คุณสามารถเรียกใช้คำสั่ง “ซึ่ง” เพื่อค้นหาตำแหน่งของคำสั่งเปลี่ยนชื่อ
which rename
/usr/bin/rename
ไวยากรณ์พื้นฐานของคำสั่งเปลี่ยนชื่อ
rename 's/old-name/new-name/' files
คำสั่งเปลี่ยนชื่อมาพร้อมกับอาร์กิวเมนต์ทางเลือกสองสามข้อพร้อมกับนิพจน์ Perl บังคับที่แนะนำคำสั่งเปลี่ยนชื่อให้ทำงานจริง
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
- -v: พิมพ์ชื่อไฟล์ที่เปลี่ยนชื่อสำเร็จ
- -n: แสดงไฟล์ที่จะเปลี่ยนชื่อ
- -f: บังคับเขียนทับไฟล์ที่มีอยู่
- perlexpr: นิพจน์ Perl
เพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับยูทิลิตี้นี้ เราได้กล่าวถึงตัวอย่างการใช้งานจริงของคำสั่งนี้ในบทความ
1. ตัวอย่างคำสั่งเปลี่ยนชื่อพื้นฐาน
สมมติว่าคุณมีไฟล์จำนวนมากที่มีนามสกุล “.html” และคุณต้องการเปลี่ยนชื่อไฟล์ “.html” ทั้งหมดเป็น “.php” ในคราวเดียว ตัวอย่างเช่น ขั้นแรกให้ทำ “ls -l” เพื่อตรวจสอบรายการไฟล์ที่มีนามสกุล “.html”
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
ตอนนี้ คุณต้องการเปลี่ยนนามสกุลของไฟล์เหล่านี้ทั้งหมดจาก “.html” เป็น “.php“ คุณสามารถใช้คำสั่ง “เปลี่ยนชื่อ” ต่อไปนี้กับ นิพจน์ Perl ดังที่แสดงด้านล่าง
ravisaive@tecmint:~$ rename 's/\.html$/\.php/' *.html
หมายเหตุ: ในคำสั่งข้างต้น เราใช้สองอาร์กิวเมนต์
- อาร์กิวเมนต์แรกคือ นิพจน์ Perl ที่แทนที่ .html ด้วย .php
- อาร์กิวเมนต์ที่สองบอกให้คำสั่งเปลี่ยนชื่อแทนที่ไฟล์ทั้งหมดด้วย *.php
มาตรวจสอบว่าไฟล์ทั้งหมดเปลี่ยนชื่อเป็นนามสกุล “.php” โดยทำ ls -l ในข้อความแจ้งหรือไม่
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.php
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.php
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.php
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.php
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.php
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.php
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.php
ตอนนี้คุณจะเห็นแล้วว่าไฟล์ html ทั้งหมดถูกเปลี่ยนชื่อเป็น php
2. ตรวจสอบการเปลี่ยนแปลงก่อนรันคำสั่งเปลี่ยนชื่อ
ขณะทำงานการเปลี่ยนชื่อที่สำคัญหรือสำคัญ คุณสามารถตรวจสอบการเปลี่ยนแปลงได้ตลอดเวลาด้วยการรันคำสั่งเปลี่ยนชื่อด้วยอาร์กิวเมนต์ “-n” พารามิเตอร์ “-n” จะบอกคุณอย่างชัดเจนว่าการเปลี่ยนแปลงใดจะเกิดขึ้น แต่การเปลี่ยนแปลงไม่ได้เกิดขึ้นจริง นี่คือตัวอย่างของคำสั่งด้านล่างนี้
ravisaive@tecmint:~$ rename -n 's/\.php$/\.html/' *.php
cricket.php renamed as cricket.html
entertainment.php renamed as entertainment.html
health.php renamed as health.html
lifestyle.php renamed as lifestyle.html
news.php renamed as news.html
photos.php renamed as photos.html
sports.php renamed as sports.html
หมายเหตุ: เอาต์พุตคำสั่งด้านบนจะแสดงเฉพาะการเปลี่ยนแปลง แต่ในความเป็นจริงแล้ว การเปลี่ยนแปลงจะไม่เสร็จสิ้น เว้นแต่คุณจะเรียกใช้คำสั่งโดยไม่มีสวิตช์ “-n”
3. พิมพ์เอาต์พุตการเปลี่ยนชื่อ
เราเห็นว่าคำสั่งเปลี่ยนชื่อไม่แสดงข้อมูลการเปลี่ยนแปลงใด ๆ ดังนั้น หากคุณต้องการดูรายละเอียดคำสั่งเปลี่ยนชื่อ (เหมือนกับที่เราใช้ตัวเลือก “-n”) ที่นี่เราใช้ตัวเลือก “-v” เพื่อพิมพ์คำสั่งทั้งหมด รายละเอียดการเปลี่ยนแปลงทั้งหมดที่ทำโดยคำสั่งเปลี่ยนชื่อสำเร็จ
ravisaive@tecmint:~$ rename -v 's/\.php$/\.html/' *.php
cricket.php renamed as cricket.html
entertainment.php renamed as entertainment.html
health.php renamed as health.html
lifestyle.php renamed as lifestyle.html
news.php renamed as news.html
photos.php renamed as photos.html
sports.php renamed as sports.html
4. แปลงตัวพิมพ์เล็กทั้งหมดเป็นตัวพิมพ์ใหญ่และ Vise-Versa
หากต้องการเปลี่ยนชื่อไฟล์ทั้งหมดที่มีชื่อ ตัวพิมพ์เล็ก เป็น ตัวพิมพ์ใหญ่ เป็นชุด ตัวอย่างเช่น ฉันต้องการแปลงไฟล์ต่อไปนี้ทั้งหมดจาก ตัวพิมพ์เล็ก เป็น ตัวพิมพ์ใหญ่
ตัวพิมพ์เล็กถึงตัวพิมพ์ใหญ่
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
เพียงใช้คำสั่งต่อไปนี้กับนิพจน์ Perl
ravisaive@tecmint:~$ rename 'y/a-z/A-Z/' *.html
เมื่อคุณดำเนินการคำสั่งข้างต้นแล้ว คุณสามารถตรวจสอบการเปลี่ยนแปลงได้โดยทำ “ls -l“
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 CRICKET.HTML
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 ENTERTAINMENT.HTML
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 HEALTH.HTML
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 LIFESTYLE.HTML
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 NEWS.HTML
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 PHOTOS.HTML
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 SPORTS.HTML
คุณจะเห็นว่าคำสั่งข้างต้นเปลี่ยนชื่อไฟล์ตัวพิมพ์เล็กทั้งหมด (โดยมีนามสกุล .HTML) เป็นตัวพิมพ์ใหญ่
ตัวพิมพ์ใหญ่ถึงตัวพิมพ์เล็ก
ในทำนองเดียวกัน คุณยังสามารถแปลงอักขระตัวพิมพ์ใหญ่ทั้งหมดให้เป็นตัวพิมพ์เล็กได้โดยใช้คำสั่งต่อไปนี้
ravisaive@tecmint:~$ rename 'y/A-Z/a-z/' *.HTML
ravisaive@tecmint:~$ ls -l
total 22532
-rw-rw-r-- 1 ravisaive ravisaive 6888896 Oct 10 12:10 cricket.html
-rw-rw-r-- 1 ravisaive ravisaive 588895 Oct 10 12:10 entertainment.html
-rw-rw-r-- 1 ravisaive ravisaive 6188895 Oct 10 12:10 health.html
-rw-rw-r-- 1 ravisaive ravisaive 6538895 Oct 10 12:10 lifestyle.html
-rw-rw-r-- 1 ravisaive ravisaive 938895 Oct 10 12:10 news.html
-rw-rw-r-- 1 ravisaive ravisaive 938937 Oct 10 12:11 photos.html
-rw-rw-r-- 1 ravisaive ravisaive 978137 Oct 10 12:11 sports.html
5. ใช้ตัวอักษรตัวแรกของชื่อไฟล์เป็นตัวพิมพ์ใหญ่
หากต้องการใช้อักษรตัวแรกของแต่ละชื่อไฟล์ให้เป็นตัวพิมพ์ใหญ่ ให้ใช้คำสั่งต่อไปนี้
rename 's/\b(\w)/\U$1/g' *.ext
6. เขียนทับไฟล์ที่มีอยู่
หากคุณต้องการบังคับให้เขียนทับไฟล์ที่มีอยู่ ให้ใช้ตัวเลือก “-f” ดังที่แสดงด้านล่าง
ravisaive@tecmint:~$ rename -f 's/a/b/' *.html
หากคุณต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับคำสั่งเปลี่ยนชื่อ ให้พิมพ์ “man rename” ในเทอร์มินัล
คำสั่ง เปลี่ยนชื่อ มีประโยชน์มาก หากคุณกำลังจัดการกับการเปลี่ยนชื่อไฟล์หลายไฟล์หรือเป็นชุดจากบรรทัดคำสั่ง ลองและแจ้งให้เราทราบว่ามีประโยชน์มากเพียงใดในแง่ของการเปลี่ยนชื่อไฟล์