ฉันต้องการเปลี่ยนชื่อกลุ่มของไฟล์ที่มีหมายเลข แต่แก้ไขหมายเลข + 5 ได้อย่างไร [ซ้ำ]


1

ซ้ำกันได้:
ฉันจะเปลี่ยนชื่อไฟล์จำนวนมากจากบรรทัดคำสั่งหรือใช้เครื่องมือของบุคคลที่สามได้อย่างไร

ฉันมีกลุ่มไฟล์. mp3 47 ไฟล์ที่ใช้สำหรับโครงการมัลติมีเดียที่ชื่อ 01.mp3 - 47.mp3 ไฟล์ทุกไฟล์ควรมีชื่อนั่นคือหมายเลข +5 ดังนั้น 02.mp3 ควรเป็น 07 .mp3 ไฟล์ที่ถูกเปลี่ยนชื่อสามารถมีส่วนนำหน้าบางส่วน + หมายเลขหรือสามารถเขียนลงในโฟลเดอร์ใหม่เพื่อไม่รบกวนไฟล์ที่มีอยู่

ฉันมีอูบุนตูและ Windows ตามที่ฉันต้องการ .. ใครบางคนสามารถแนะนำวิธีการนี้ได้หรือไม่?


ลองเป็นกลุ่ม ... bulkrenameutility.co.uk/Screenshots.php
Moab

พรุ่งนี้ฉันจะต้องไปเล่นกับคุณ แต่คุณน่าจะสามารถดึงบางสิ่งบางอย่างออกไปได้โดยง่าย
MaQleod

1
เมื่อคุณเพิ่มเริ่มต้นที่จุดสิ้นสุดและนับถอยหลังดังนั้นคุณไม่ต้องจัดการกับการปะทะกันระหว่างชื่อใหม่และชื่อเก่า
Peter Cordes

คำตอบ:


1

คุณสามารถทำได้ใน awk ด้วยสคริปต์เช่นนี้

#!/usr/bin/awk -f
BEGIN {
    regex = "[0-9]+"
    print "mkdir new"
}
{
    if (match($8,regex)) {
        before = substr($8,1,RSTART-1);
        pattern = substr($8,RSTART,RLENGTH);
        newnumber = pattern + 5
        after = substr($8,RSTART+RLENGTH);
        printf("mv %s new/%s%.2d%s\n", $8, before, newnumber, after);
    }
}

สมมติว่าคุณมีโฟลเดอร์ที่มีไฟล์ดังต่อไปนี้:

foo01
foo02
foo03
foo04
foo05
bar10.txt
bar11.txt
bar12.txt
bar13.txt
rename.awk

หากคุณดำเนินการคำสั่ง ls -l|./rename.awk|sh จากนั้นคุณจะมี:

new/foo06
new/foo07
new/foo08
new/foo09
new/foo10
new/bar15.txt
new/bar16.txt
new/bar17.txt
new/bar18.txt
rename.awk

แน่นอนคุณสามารถแก้ไขคำสั่งสคริปต์หรือเชลล์เพื่อเปลี่ยนชื่อไฟล์ที่เหมาะสมกับรูปแบบที่แน่นอนหรือเพิ่มขึ้นตามจำนวนที่แตกต่างกัน


ดูเหมือนวิธีที่ง่ายที่สุด แต่อาจมีปัญหาเกี่ยวกับไวยากรณ์ ฉันใช้ Ubuntu 11.10 นี่คือสิ่งที่ปรากฏขึ้นหลังจากที่ฉันรันสคริปต์: myname @ X201: ~ / Dropbox / Eye Rhymes เว็บ / เสียง $ sh rename.sh rename.sh: 2: BEGIN: ไม่พบ rename.sh: 3: regex: ไม่พบคำเตือน: ไม่ทราบประเภท mime สำหรับ "mkdir new" - การใช้ "application / octet-stream" ข้อผิดพลาด: ไม่มีไฟล์ดังกล่าว "mkdir new" rename.sh: 5: ข้อผิดพลาดทางไวยากรณ์: "}" myname ที่ไม่คาดคิด @ X201: ~ / Dropbox / Eye Rhymes เว็บ / ออดิโอ $
Kendor

@Kendor: อาจเป็นเพราะที่ตั้งของล่าม awk ในระบบของคุณ ฉันสร้างสคริปต์นี้ในบัญชีเชลล์จากบัญชีโฮสติ้งที่ใช้ร่วมกันและในระบบนั้น awk อยู่ที่ /usr/bin/awk. อย่างไรก็ตามตำแหน่งปกติสำหรับ awk คือ /bin/awk, ฉันคิด . คุณสามารถตรวจสอบระบบของคุณโดยการเรียกใช้ which awkจากนั้นเปลี่ยนบรรทัดแรกในสคริปต์เพื่อให้ตรงกับตำแหน่งที่แสดง
Lèse majesté

@Kendor: คุณวิ่ง sh บนสคริปต์ awk หากคุณต้องการให้ไฟล์ปฏิบัติการได้ (ด้วย chmod ) และเรียกใช้มันจะต้องเรียกใช้ awk ผ่าน #! กลไก. แต่คุณวิ่ง sh บนและไม่ถูกต้อง sh ต้นฉบับ
Peter Cordes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.