วิธีใช้คำสั่งเปลี่ยนชื่อบน Linux
สัมผัสกับไฟล์ที่เปลี่ยนชื่อโรงไฟฟ้าของโลก Linux และพักผ่อนให้mv
ตัวเอง Rename
มีความยืดหยุ่นรวดเร็วและบางครั้งก็ง่ายกว่าด้วยซ้ำ นี่คือบทช่วยสอนสำหรับโรงไฟฟ้าของคำสั่งนี้
mv ผิดอะไร
mv
มีอะไรผิดปกติกับการเป็น คำสั่งทำงานได้ดีและพบได้ในการกระจาย Linux ทั้งหมดใน macOS และในระบบปฏิบัติการอื่น ๆ ที่คล้าย Unix ดังนั้นจึงใช้ได้เสมอ แต่บางครั้งคุณก็ต้องมีรถปราบดินไม่ใช่พลั่ว
mv
คำสั่งมีจุดมุ่งหมายในชีวิตและที่เป็นที่จะย้ายไฟล์ มันเป็นผลข้างเคียงที่น่ายินดีที่สามารถใช้เพื่อย้ายไฟล์ที่มีอยู่ไปยังไฟล์ใหม่โดยใช้ชื่อใหม่ เอฟเฟกต์สุทธิคือการเปลี่ยนชื่อไฟล์เพื่อให้เราได้สิ่งที่ต้องการ แต่mv
ไม่ใช่เครื่องมือเปลี่ยนชื่อไฟล์โดยเฉพาะ
เปลี่ยนชื่อไฟล์เดี่ยวด้วย mv
เพื่อใช้mv
ในการเปลี่ยนชื่อประเภทไฟล์mv
ช่องว่างชื่อไฟล์ช่องว่างและชื่อใหม่ที่คุณต้องการให้ไฟล์มี จากนั้นกด Enter
คุณสามารถใช้ ls
เพื่อตรวจสอบว่าไฟล์ถูกเปลี่ยนชื่อ
mv oldfile.txt newfile.txt
ls * .txt
เปลี่ยนชื่อไฟล์หลายไฟล์ด้วย mv
สิ่งต่างๆจะยุ่งยากขึ้นเมื่อคุณต้องการเปลี่ยนชื่อไฟล์หลายไฟล์ mv
ไม่มีความสามารถในการจัดการกับการเปลี่ยนชื่อไฟล์หลายไฟล์ คุณต้องหันไปใช้เทคนิค Bash ที่ดี เป็นเรื่องดีถ้าคุณรู้จัก fu บรรทัดคำสั่งระดับกลาง แต่ความซับซ้อนของการเปลี่ยนชื่อไฟล์หลายไฟล์ด้วยmv
ขาตั้งนั้นตรงกันข้ามกับความสะดวกในการใช้mv
เพื่อเปลี่ยนชื่อไฟล์เดียว
สิ่งต่างๆบานปลายอย่างรวดเร็ว
สมมติว่าเรามีไดเร็กทอรีที่มีไฟล์หลากหลายประเภทซึ่งแตกต่างกันไป ไฟล์เหล่านี้บางไฟล์มีนามสกุล“ .prog” เราต้องการเปลี่ยนชื่อที่บรรทัดคำสั่งเพื่อให้มีนามสกุล“ .prg”
เราจะทะเลาะกันmv
เพื่อทำสิ่งนั้นให้เราได้อย่างไร? มาดูไฟล์กัน
ls * .prog -l
นี่เป็นวิธีหนึ่งในการดำเนินการที่ไม่ต้องใช้การเขียนไฟล์สคริปต์ Bash จริง
สำหรับ f ใน * .prog; ทำ mv - "$ f" "$ {f% .prog} .prg"
ได้ผลหรือไม่ ลองตรวจสอบไฟล์และดู
ls * .pr *
ใช่มันได้ผล ตอนนี้เป็นไฟล์“ .prg” ทั้งหมดและไม่มีไฟล์“ .prog” ในไดเร็กทอรี
เกิดอะไรขึ้น?
คำสั่งยาว ๆ นั้นทำอะไรได้จริง? มาทำลายมันลง
สำหรับ f ใน * .prog; ทำ mv - "$ f" "$ {f% .prog} .prg"
ส่วนแรกเริ่มลูปที่จะประมวลผลไฟล์“ .prog” แต่ละไฟล์ในไดเร็กทอรี
ส่วนต่อไปกล่าวว่าสิ่งที่การประมวลผลจะทำ ใช้ mv
เพื่อย้ายแต่ละไฟล์ไปยังไฟล์ใหม่ ไฟล์ใหม่จะถูกตั้งชื่อด้วยชื่อไฟล์ต้นฉบับโดยไม่รวมส่วน“ .prog” ส่วนขยายใหม่ของ“ .prg” จะถูกใช้แทน
จะต้องมีวิธีที่ง่ายกว่านี้
แน่นอนที่สุด มันคือrename
คำสั่ง
rename
ไม่ได้เป็นส่วนหนึ่งของการแจกจ่าย Linux มาตรฐานดังนั้นคุณจะต้องติดตั้ง นอกจากนี้ยังมีชื่อที่แตกต่างกันในตระกูลต่างๆของ Linux แต่ทั้งหมดทำงานในลักษณะเดียวกัน คุณจะต้องแทนที่ชื่อคำสั่งที่เหมาะสมตามรสชาติของ Linux ที่คุณใช้
ในการแจกแจงที่ได้รับจาก Ubuntu และ Debian คุณติดตั้งrename
ดังนี้:
sudo apt-get install เปลี่ยนชื่อ
ในการแจกแจงที่ได้รับ Fedora และ RedHat คุณติดตั้งprename
แบบนี้ สังเกต "p" เริ่มต้นซึ่งย่อมาจาก Perl
sudo dnf ติดตั้ง prename
ในการติดตั้งใน Manjaro Linux ให้ใช้คำสั่งต่อไปนี้ โปรดสังเกตว่าคำสั่งเปลี่ยนชื่อถูกเรียกperl-rename
ใช้
sudo pacman -Syu perl- เปลี่ยนชื่อ
มาทำอีกครั้ง
rename
และในครั้งนี้เราจะใช้ เราจะย้อนเวลากลับไปเพื่อให้เรามีชุดไฟล์“ .prog”
ls * .prog
ตอนนี้ให้ใช้คำสั่งต่อไปนี้เพื่อเปลี่ยนชื่อ จากนั้นเราจะตรวจสอบls
ว่าใช้งานได้หรือไม่ อย่าลืมแทนที่rename
ด้วยชื่อคำสั่งที่เหมาะสมสำหรับ Linux ของคุณหากคุณไม่ได้ใช้ Ubuntu หรือ Linux ที่ได้รับจาก Debian
เปลี่ยนชื่อ 's / .prog / .prg /' * .prog
ls * .pr *
วิธีนี้ได้ผลตอนนี้เป็นไฟล์“ .prg” ทั้งหมดและไม่มีไฟล์“ .prog” เหลืออยู่ในไดเร็กทอรี
เกิดอะไรขึ้นในช่วงเวลานี้?
มาอธิบายความมหัศจรรย์นั้นเป็นสามส่วน
แรกส่วนหนึ่งเป็นชื่อคำสั่งrename
(หรือprename
หรือperl-rename
สำหรับการแจกแจงอื่น ๆ )
สุดท้ายเป็นส่วนหนึ่ง*.prog
ที่บอกrename
ในการดำเนินงานในทุก“.prog” ไฟล์
กลางส่วนกำหนดงานที่เราต้องการที่จะทำในแต่ละชื่อไฟล์ s
วิธีการแทน คำแรก ( .prog
) คือสิ่งที่rename
จะค้นหาในแต่ละชื่อไฟล์และคำที่สอง ( .prg
) คือสิ่งที่จะถูกแทนที่ด้วย
ส่วนตรงกลางของคำสั่งหรือนิพจน์กลางคือ 'นิพจน์ทั่วไป' ของ Perl และเป็นสิ่งที่ทำให้rename
คำสั่งมีความยืดหยุ่น
การเปลี่ยนส่วนอื่น ๆ ของชื่อไฟล์
เราได้เปลี่ยนนามสกุลไฟล์แล้วเรามาแก้ไขส่วนอื่น ๆ ของชื่อไฟล์
ในไดเร็กทอรีมีไฟล์ซอร์สโค้ด C จำนวนมาก ชื่อไฟล์ทั้งหมดขึ้นต้นด้วย "slang_" ls
เราสามารถตรวจสอบเรื่องนี้ด้วย
ls sl * .c
เราจะแทนที่ "slang_" ที่เกิดขึ้นทั้งหมดด้วย "sl_" รูปแบบของคำสั่งเป็นที่คุ้นเคยสำหรับเราแล้ว เรากำลังเปลี่ยนคำค้นหาคำที่ใช้แทนและประเภทไฟล์
เปลี่ยนชื่อ 's / slang_ / sl_' * .c
คราวนี้เรากำลังมองหาไฟล์“ .c” และค้นหา“ slang_” เมื่อใดก็ตามที่พบ“ slang_” ในชื่อไฟล์ระบบจะแทนที่ด้วย“ sl_”
เราสามารถตรวจสอบผลลัพธ์ของคำสั่งนั้นได้โดยทำซ้ำls
คำสั่งจากด้านบนด้วยพารามิเตอร์เดียวกัน:
ls sl * .c
การลบบางส่วนของชื่อไฟล์
เราสามารถลบส่วนหนึ่งของชื่อไฟล์ได้โดยแทนที่คำค้นหาโดยไม่มีอะไรเลย
ls * .c
เปลี่ยนชื่อ 's / sl _ //' * .c
ls * .c
เราจะเห็นได้จากls
คำสั่งว่าไฟล์“ .c” ของเรามี“ sl_” อยู่ข้างหน้า มากำจัดมันทั้งหมด
rename
คำสั่งตามรูปแบบเช่นเดียวกับก่อน เรากำลังมองหาไฟล์“ .c” ข้อความค้นหาคือ“ sl_” แต่ไม่มีคำที่ใช้แทน แบ็กสแลชสองตัวโดยไม่มีอะไรคั่นระหว่างพวกเขาหมายความว่าอะไรสตริงว่าง
rename
จะประมวลผลไฟล์“ .c” แต่ละไฟล์ตามลำดับ มันจะค้นหา“ sl_” ในชื่อไฟล์ หากพบจะถูกแทนที่โดยไม่มีอะไร กล่าวคือข้อความค้นหาจะถูกลบ
การใช้ls
คำสั่งครั้งที่สองเป็นการยืนยันว่าคำนำหน้า“ sl_” ถูกลบออกจากไฟล์“ .c” ทุกไฟล์
จำกัด การเปลี่ยนแปลงเฉพาะบางส่วนของชื่อไฟล์
มาls
ดูไฟล์ที่มีสตริง“ param” ในชื่อไฟล์กัน จากนั้นเราจะใช้rename
แทนสตริงนั้นด้วยสตริง "พารามิเตอร์" เราจะใช้ls
อีกครั้งเพื่อดูผลของrename
คำสั่งที่มีต่อไฟล์เหล่านั้น
ls * param *
เปลี่ยนชื่อ 's / param / parameter' * .c
ls * param *
พบไฟล์สี่ไฟล์ที่มี "param" ในชื่อไฟล์ param.c, param_one.c และ param_two.c ทั้งหมดมี "param" ที่จุดเริ่มต้นของชื่อ third_param.c มี“ param” ต่อท้ายชื่อก่อนส่วนขยาย
rename
คำสั่งเป็นไปเพื่อค้นหา“param” ทุกที่ในชื่อไฟล์และแทนที่ด้วยพารามิเตอร์“” ในทุกกรณี
การใช้ls
คำสั่งครั้งที่สอง แสดงให้เราเห็นว่านั่นคือสิ่งที่เกิดขึ้น ไม่ว่า "param" จะอยู่ที่จุดเริ่มต้นหรือตอนท้ายของชื่อไฟล์จะถูกแทนที่ด้วย "พารามิเตอร์"
เราสามารถใช้ metacharacters ของ Perl เพื่อปรับแต่งพฤติกรรมของนิพจน์กลาง Metacharacters คือสัญลักษณ์ที่แสดงถึงตำแหน่งหรือลำดับของอักขระ ตัวอย่างเช่น^
หมายถึง "จุดเริ่มต้นของสตริง" $
หมายถึง "จุดสิ้นสุดของสตริง" และ.
หมายถึงอักขระเดี่ยวใด ๆ (นอกเหนือจากอักขระขึ้นบรรทัดใหม่)
เราจะใช้จุดเริ่มต้นของ string metacharacter ( ^
) เพื่อ จำกัด การค้นหาของเราไว้ที่จุดเริ่มต้นของชื่อไฟล์
ls * param * .c
เปลี่ยนชื่อพารามิเตอร์ของ / ^ / ค่า / '* .c
ls * param * .c
ค่า ls * .c
ไฟล์ที่เราเปลี่ยนชื่อก่อนหน้านี้มีอยู่ในรายการและเราจะเห็นสตริง“ พารามิเตอร์” อยู่ที่จุดเริ่มต้นของชื่อไฟล์สามชื่อและอยู่ท้ายชื่อไฟล์ใดชื่อหนึ่ง
rename
คำสั่งของเราใช้จุดเริ่มต้นของบรรทัด (^
) metacharacter ก่อนคำค้นหา "parameter" สิ่งนี้บอกrename
ให้พิจารณาเฉพาะคำค้นหาที่พบหากอยู่ที่จุดเริ่มต้นของชื่อไฟล์ สตริงการค้นหา "พารามิเตอร์" จะถูกละเว้นหากอยู่ที่อื่นในชื่อไฟล์
เมื่อตรวจสอบด้วยls
เราจะเห็นว่าชื่อไฟล์ที่มี "พารามิเตอร์" ที่ท้ายชื่อไฟล์ไม่ได้รับการแก้ไข แต่ชื่อไฟล์ทั้งสามที่มี "พารามิเตอร์" ที่จุดเริ่มต้นของชื่อได้มีการแทนที่สตริงการค้นหาด้วยคำที่ใช้แทน “ คุณค่า”
พลังของการrename
อยู่ในอำนาจของ Perl พลังทั้งหมดของ Perl อยู่ที่การกำจัดของคุณ
การค้นหาด้วยการจัดกลุ่ม
rename
ยังมีลูกเล่นเพิ่มเติมในแขนเสื้อ ลองพิจารณากรณีที่คุณอาจมีไฟล์ที่มีสตริงคล้ายกันในชื่อไฟล์ ไม่ใช่สตริงเดียวกันทั้งหมดดังนั้นการค้นหาแบบธรรมดาและการแทนที่จะไม่ทำงานที่นี่
ในตัวอย่างนี้เราใช้ls
เพื่อตรวจสอบว่าไฟล์ใดที่เรามีที่ขึ้นต้นด้วย“ str” มีสองคนคือ string.c และ strale.c เราสามารถเปลี่ยนชื่อสตริงทั้งสองได้พร้อมกันโดยใช้เทคนิคที่เรียกว่าการจัดกลุ่ม
นิพจน์กลางของrename
คำสั่งนี้จะค้นหาสตริงภายในชื่อไฟล์ที่มีลำดับอักขระ "stri" หรือ "stra" โดยลำดับเหล่านั้นจะตามด้วย "ng" ทันที กล่าวอีกนัยหนึ่งคือข้อความค้นหาของเราจะมองหา "สตริง" และ "แปลก" คำทดแทนคือ“ ปัง”
ls str * .c
เปลี่ยนชื่อ 's / (stri | stra) ng / bang /' * .c
ls ห้าม * .c
การใช้ ls
ครั้งที่สองเป็นการยืนยันว่า string.c กลายเป็น bang.c และตอนนี้ strale.c เป็น bangle.c
การใช้การแปลด้วยการเปลี่ยนชื่อ
rename
คำสั่งสามารถดำเนินการกับชื่อไฟล์ที่เรียกว่าคำแปล ตัวอย่างง่ายๆของการแปลคือการบังคับให้ชุดชื่อไฟล์เป็นตัวพิมพ์ใหญ่
ในrename
คำสั่งดังต่อไปนี้แจ้งให้ทราบว่าเราไม่ได้ใช้ในการเริ่มต้นการแสดงออกกลางที่เรากำลังใช้s/
y/
สิ่งนี้บอกว่า rename
เราไม่ได้ทำการเปลี่ยนตัว เรากำลังดำเนินการแปล
a-z
ระยะคือการแสดงออก Perl นั่นหมายความว่าตัวอักษรตัวพิมพ์เล็กทั้งหมดในลำดับจาก A ถึง Z ในทำนองเดียวกันA-Z
คำนี้แสดงถึงตัวอักษรตัวพิมพ์ใหญ่ทั้งหมดในลำดับจาก A ถึง Z
นิพจน์กลางในคำสั่งนี้สามารถถอดความได้ว่า "หากพบตัวอักษรพิมพ์เล็กจาก a ถึง z ในชื่อไฟล์ให้แทนที่ด้วยอักขระที่เกี่ยวข้องจากลำดับของอักขระตัวพิมพ์ใหญ่จาก A ถึง Z"
ในการบังคับให้ชื่อไฟล์ของไฟล์“ .prg” เป็นตัวพิมพ์ใหญ่ให้ใช้คำสั่งนี้:
เปลี่ยนชื่อ 'y / az / AZ /' * .prg
ls * .PRG
ls
คำสั่งแสดงให้เราเห็นว่าทั้งหมดของ“.prg” ชื่อไฟล์ตอนนี้อยู่ในตัวพิมพ์ใหญ่ ตามความเป็นจริงแล้วไฟล์เหล่านี้จะไม่ใช่ไฟล์“ .prg” อีกต่อไป เป็นไฟล์“ .PRG” Linux มีความละเอียดอ่อน
เราสามารถย้อนกลับคำสั่งสุดท้ายนั้นได้โดยการย้อนกลับตำแหน่งของa-z
และA-Z
เงื่อนไขในนิพจน์กลาง
เปลี่ยนชื่อ 'y / AZ / az /' * .PRG
ls * .prg
คุณ (Wo | Do) ไม่ได้เรียนรู้ Perl ในห้านาที
การจับกับ Perl นั้นใช้เวลาได้ดี แต่ในการเริ่มต้นใช้ความสามารถในการประหยัดเวลาของrename
คำสั่งคุณไม่จำเป็นต้องมีความรู้เกี่ยวกับ Perl มากนักเพื่อเก็บเกี่ยวผลประโยชน์มากมายในด้านพลังงานความเรียบง่ายและเวลา