แบทช์เปลี่ยนชื่อไฟล์เป็นตัวพิมพ์เล็ก


17

มีวิธีการเปลี่ยนชื่อไฟล์ทั้งหมดในไดเรกทอรีเป็นตัวพิมพ์เล็ก | ตัวพิมพ์ใหญ่หรือไม่?

ฉันกำลังมองหาคำสั่งoneliner

ฉันรัก TotalCommander's alt+f7ตอนนี้ฉันต้องการฟังก์ชั่นนั้นใน Terminal

คำตอบ:


20

สำหรับแต่ละไฟล์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


4
คุณอาจต้องการผ่าน "-v" เพื่อmvให้คุณเห็นสิ่งที่กำลังทำ คุณอาจไม่ต้องการที่จะผ่าน "-f" เพราะสิ่งนี้อาจขัดขวางไฟล์ที่มีอยู่
sds

สิ่งนี้ใช้ไม่ได้กับไฟล์ที่มีช่องว่างในชื่อ
Tianxiang Xiong

คุณสามารถใช้เครื่องหมายคำพูดรอบชื่อไฟล์
Stef K

2
ขออภัยส่วนที่เกี่ยวกับ ls * jpg เป็นความคิดที่ ไม่ดี mywiki.wooledge.org/ParsingLs คุณสามารถรับผลลัพธ์เดียวกันได้ด้วย * jpg ตามตำแหน่งที่คุณมี * ในตอนแรก
ทิงค์

16

prenameมีสาธารณูปโภคที่สง่างามมากขึ้นและโดยทั่วไปเรียกว่าเป็น

เขียนโดย Larry Wall มันมาพร้อมกับ perlดังนั้นจึงเป็นไปได้มากที่สุดในระบบของคุณเช่น/usr/bin/prename(ถ้าคุณมีทางเลือกในการตั้งค่าก็อาจจะพร้อมใช้งานตาม/usr/bin/renamesymlinked ผ่าน / 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 สำหรับรายละเอียดเพิ่มเติม


1

การใช้ find

find . -name * -type f -exec rename 'y/A-Z/a-z/' '{}' \;

สำหรับ find

  • แน่นอนหลังจาก-nameใส่รูปแบบของคุณ
  • -maxdepth 0: เฉพาะไดเรกทอรีปัจจุบัน

สำหรับ rename

  • -n, -nono: ไม่มีการดำเนินการ: พิมพ์ชื่อไฟล์ที่จะเปลี่ยนชื่อ แต่ไม่เปลี่ยนชื่อ
  • y/source/dest/: ถอดตัวอักษรในช่องว่างรูปแบบซึ่งปรากฏในแหล่งที่มาของอักขระที่สอดคล้องกันในปลายทาง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.