มีวิธีการเปลี่ยนชื่อไฟล์ทั้งหมดในไดเรกทอรีเป็นตัวพิมพ์เล็ก | ตัวพิมพ์ใหญ่หรือไม่?
ฉันกำลังมองหาคำสั่งoneliner
ฉันรัก TotalCommander's alt+f7
ตอนนี้ฉันต้องการฟังก์ชั่นนั้นใน Terminal
มีวิธีการเปลี่ยนชื่อไฟล์ทั้งหมดในไดเรกทอรีเป็นตัวพิมพ์เล็ก | ตัวพิมพ์ใหญ่หรือไม่?
ฉันกำลังมองหาคำสั่งoneliner
ฉันรัก TotalCommander's alt+f7
ตอนนี้ฉันต้องการฟังก์ชั่นนั้นใน Terminal
คำตอบ:
สำหรับแต่ละไฟล์a_file
ในไดเรกทอรีปัจจุบันเปลี่ยนชื่อa_file
เป็นตัวพิมพ์เล็ก
for a_file in *;do mv -v "$a_file" `echo "$a_file" | tr [:upper:] [:lower:]` ;done;
สำหรับตัวพิมพ์ใหญ่กลับอาร์กิวเมนต์เป็น [:lower:] [:upper:]
tr
ลิงก์อ้างอิงคำสั่ง
ปรับปรุง
สำหรับการควบคุมมากยิ่งขึ้นสามารถถูกแทนที่ด้วย*
ls
ตัวอย่างเช่นในไดเรกทอรีที่ประกอบด้วย 1.txt, 2.txt, 3.txt, 1.jpg, 2.jpg และ 3.jpg เพื่อกรองเฉพาะไฟล์ * .jpg เท่านั้นที่ls
สามารถใช้ได้:
for a_file in $(ls *.jpg);do mv -v $a_file `echo $a_file | tr [:upper:] [:lower:]` ;done;
รหัสด้านบนจะกำหนดให้กับa_file
ตัวแปรไฟล์ทั้งหมดที่มีนามสกุล. jpg
ปรับปรุง-v
ตัวเลือกเพิ่มmv
คำสั่งตามคำแนะนำsds
prename
มีสาธารณูปโภคที่สง่างามมากขึ้นและโดยทั่วไปเรียกว่าเป็น
เขียนโดย Larry Wall มันมาพร้อมกับ perl
ดังนั้นจึงเป็นไปได้มากที่สุดในระบบของคุณเช่น/usr/bin/prename
(ถ้าคุณมีทางเลือกในการตั้งค่าก็อาจจะพร้อมใช้งานตาม/usr/bin/rename
symlinked ผ่าน / etc / ทางเลือกอื่น ๆprename
)
ใช้มันคุณสามารถเปลี่ยนชื่อไฟล์หลายไฟล์ในคำสั่งเดียวโดยให้การแสดงออกของ perl ใด ๆ (รวมถึง แต่ไม่ จำกัด เฉพาะการทดแทนs///
หรือการทับศัพท์ถ่านtr///
):
ตัวอย่าง:
# Lowercase all *.JPG filenames:
prename tr/A-Z/a-z/ *.JPG
# Change any 'No' in a filename to a 'Yes':
prename s/No/Yes/g *No*
# increment first sequence of digits in a filename by 3:
prename 's/([0-9]+)/$1+3/e' *[0-9]*
# If a file contains 'aaa', append '.bak' to its name
prename 'if (/aaa/) {$_ .= ".bak"}' *
และอื่น ๆ
อีกสิ่งที่ดีเกี่ยวกับ prename คือมันช่วยปกป้องคุณในกรณีที่เปลี่ยนชื่อไฟล์เป็นชื่อไฟล์ที่มีอยู่
man prename
สำหรับรายละเอียดเพิ่มเติม
find
find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;
find
-name
ใส่รูปแบบของคุณ-maxdepth 0
: เฉพาะไดเรกทอรีปัจจุบันrename
-n, -nono
: ไม่มีการดำเนินการ: พิมพ์ชื่อไฟล์ที่จะเปลี่ยนชื่อ แต่ไม่เปลี่ยนชื่อy/source/dest/
: ถอดตัวอักษรในช่องว่างรูปแบบซึ่งปรากฏในแหล่งที่มาของอักขระที่สอดคล้องกันในปลายทาง
mv
ให้คุณเห็นสิ่งที่กำลังทำ คุณอาจไม่ต้องการที่จะผ่าน "-f" เพราะสิ่งนี้อาจขัดขวางไฟล์ที่มีอยู่