ฉันมีไฟล์ 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.tmpfilename.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