ฉันมีไฟล์ TIFF จำนวนหนึ่งชื่อ:
sw.001.tif
sw.002.tif
...
และฉันต้องการลบ.tif
ที่ส่วนท้ายของแต่ละไฟล์ ฉันจะใช้rename
คำสั่งเพื่อทำสิ่งนี้ได้อย่างไร
ฉันมีไฟล์ TIFF จำนวนหนึ่งชื่อ:
sw.001.tif
sw.002.tif
...
และฉันต้องการลบ.tif
ที่ส่วนท้ายของแต่ละไฟล์ ฉันจะใช้rename
คำสั่งเพื่อทำสิ่งนี้ได้อย่างไร
คำตอบ:
perl
ของrename
(ตามปกติพบบน Debian ที่เรียกว่าprename
) หรืออนุพันธ์นี้ ( rename
แพ็คเกจบน Debian):
rename 's/\.tif$//' *.tif
util-linux
rename
(ตามปกติจะพบได้ที่ Red Hat rename.ul
บน Debian):
rename -- .tif '' *.tif
(โปรดทราบว่าจะเปลี่ยนชื่อblah.tiffany.tif
เป็นblahfany.tif
)
สำหรับการไม่เปลี่ยนชื่อคุณอาจทำ:
$ for i in *.tif; do mv -i $i `basename $i .tif`; done
(-i เพื่อเตือนไม่ให้เปลี่ยนไฟล์)
for i in ./*.tif; do mv -i "$i" "${i%.tif}"; done
rename -- .oldext .newext *.oldext
สิ่งนี้จะแทนที่ส่วนขยายเก่าด้วยส่วนใหม่ ในการลบส่วนขยายออกคุณสามารถส่งผ่านสตริงว่างเปล่าเป็นอาร์กิวเมนต์ได้อย่างชัดเจน
rename -- .gz.tmp '' *.gz.tmp
ด้วยคำสั่งข้างต้นไฟล์ทั้งหมดที่มีส่วนขยายในโฟลเดอร์ปัจจุบันจะเปลี่ยนชื่อเป็น.gz.tmp
filename.gz
อ้างถึงบทความ: Linux: ลบนามสกุลไฟล์สำหรับหลายไฟล์เพื่อดูรายละเอียด
rename
ที่ไม่เข้ากันกับ (และมาก จำกัด มากกว่า) แบบคำสั่งจากrename
perl
.oldext
ชื่อไฟล์โดยไม่จำเป็นต้องมีนามสกุล ( foo.oldextasy.oldext
จะถูกเปลี่ยนชื่อเป็นfootasy.oldext
)
หากคุณใช้ IBM AIX คุณจะไม่มีrename
คำสั่งดังนั้นเพื่อที่จะลบแบตช์นามสกุลไฟล์คุณจะต้องใช้คำสั่ง vanilla System V UNIX ธรรมดา:
for file in *.tif; do
mv $file `echo $file | sed 's/.tif$//'`;
done;
เราทำแบบนี้ซ้ำได้ไหม
for i in *.gz; do mv -i $i `basename $i .gz`; done