วิธีใช้คำสั่งเปลี่ยนชื่อบน 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 มากนักเพื่อเก็บเกี่ยวผลประโยชน์มากมายในด้านพลังงานความเรียบง่ายและเวลา