วิธีการเปลี่ยนชื่อไฟล์ (ภาพ) ตามไฟล์ CSV


11

สิ่งที่ฉันมีและต้องการบรรลุ:

  1. มีหลายพันภาพในโฟลเดอร์เดียว

  2. ฉันมีไฟล์ CSV พร้อมคอลัมน์ต่อไปนี้:

    A: ชื่อเดิม B: เปลี่ยนชื่อ

    แถวทั่วไปมีลักษณะดังนี้:

    "original-1.jpg","renamed-1.jpg"  
    "original-2.jpg","renamed-2.jpg"

    ฉันสามารถลบเครื่องหมายคำพูดได้นั่นไม่ใช่ปัญหา

  3. ตอนนี้ฉันต้องการใช้แอพหรือเรียกใช้สคริปต์ที่จะค้นหารูปภาพทั้งหมดในคอลัมน์ A และเปลี่ยนชื่อเป็นชื่อในคอลัมน์ B (เช่น original-1.jpg -> renamed-1.jpg)

มีคำตอบรอบ ๆ เช่น:

http://ubuntuforums.org/showthread.php?t=1069652

http://systembash.com/content/one-line-batch-rename-files-using-csv-input-file-and-awk/

อย่างไรก็ตามมีสคริปต์บางส่วนที่เกี่ยวข้องและฉันไม่แน่ใจว่าสคริปต์เหล่านั้นทั้งหมดมีผลกับโฟลเดอร์ที่คุณเก็บสคริปต์ไว้หรือไม่หรือสามารถเปลี่ยนชื่อไฟล์ทั้งหมดในดิสก์ที่ตรงตามเงื่อนไข แน่นอนว่าต้องหลีกเลี่ยงหลัง

สิ่งที่ฉันกำลังมองหาคือคำแนะนำง่ายๆในการเปลี่ยนชื่อไฟล์และวิธีเลือกโฟลเดอร์ที่มีไฟล์

ขอบคุณล่วงหน้า.

คำตอบ:


13

สิ่งนี้น่าจะเหมาะกับคุณ:

sed 's/"//g' files.csv | while IFS=, read orig new; do mv "$orig" "$new"; done 

คำอธิบาย:

  • sed 's/"//g' files.csv : ลบเครื่องหมายคำพูด
  • IFS=, : แยกอินพุตบน ,
  • while read orig new; do ... done: นี่จะอ่านบรรทัดอินพุตแต่ละแยกมันกับค่าของ$IFS(ที่นี่เครื่องหมายจุลภาค) และบันทึกข้อมูลที่ 1 เป็นและส่วนที่เหลือเป็น$orig$new
  • mv "$orig" "$new" : สิ่งนี้จะเปลี่ยนชื่อไฟล์ตามที่ร้องขอ

หากไฟล์ของคุณมีชื่อไฟล์เท่านั้น (เช่นorig.jpg) และไม่มีพา ธ (ไม่ใช่/home/take2/orig.jpgหรือคล้ายกัน) คำสั่งด้านบนจะมีผลกับไฟล์ในไดเรกทอรีปัจจุบันของคุณเท่านั้น ดังนั้นคุณต้องเปิดเทอร์มินัลcdไปยังไดเรกทอรีเป้าหมายและเรียกใช้ที่นั่น

ทดสอบครั้งแรก:

เพื่อทดสอบสิ่งนี้คุณสามารถทำการรันแบบแห้งก่อนโดยพิมพ์คำสั่งที่จะรันโดยไม่ต้องดำเนินการจริง:

sed 's/"//g' files.csv | while IFS=, read orig new; do echo mv "$orig" "$new"; done 

เยี่ยมมากนี่อธิบายได้ดีกว่า :) เพียงตรวจสอบก่อนที่จะรัน - ฉันต้อง cd ไปยังไดเรกทอรีเป้าหมายและเรียกใช้บรรทัดนี้หรือฉันต้องบันทึกบรรทัดนั้นเป็น example.sh แล้วเรียกใช้ "example.sh" จาก terminal?
take2

@ take2 คุณสามารถเรียกใช้บรรทัดได้โดยตรง ฉันอัปเดตคำตอบด้วยวิธีดูว่าอะไรจะทำงานได้โดยไม่ต้องเปลี่ยนไฟล์จริง ๆ ฉันขอแนะนำให้คุณทำก่อน
terdon

ยอดเยี่ยมมันใช้งานได้! อีกสิ่งหนึ่ง - มันสนใจสิ่งที่เป็นป้ายชื่อของคอลัมน์ (พวกเขาเป็น "ต้นกำเนิด" และ "ใหม่" ในขณะนี้) หรือเพียงแค่เปลี่ยนชื่อคอลัมน์ A ชื่อชื่อคอลัมน์ B?
take2

@ take2 ฉลากอะไร? ไม่มันจะใช้ฟิลด์คั่นด้วยเครื่องหมายจุลภาคแรกและเปลี่ยนเป็นฟิลด์ที่สอง โปรดทราบว่าหากมีมากกว่าสองฟิลด์มันจะเปลี่ยนชื่อเป็นส่วนที่เหลือของบรรทัด ตราบใดที่ไฟล์อินพุตของคุณเป็นเหมือนสิ่งที่คุณโพสต์ไฟล์จะทำงานตามที่คาดไว้
terdon

Btw เทอร์มินัลยังแสดง "mv: ไม่สามารถ stat 'orig': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" แม้ว่าจะเปลี่ยนชื่อไฟล์แล้วก็ตาม
take2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.