การเปลี่ยนชื่อไฟล์ / ชื่อเป็นกลุ่มโซลูชันใด ๆ ที่ฉลาดกว่าใช่ไหม


8

ฉันมีไฟล์สองสามพันไฟล์ที่จะเปลี่ยนชื่อ

สิ่งที่เป็นฉันมีold file namesและnew file namesเป็นคอลัมน์ในสเปรดชีต โดยไม่ต้องเปลี่ยนชื่อพวกเขาทีละคน มีวิธีที่ดีกว่าในการทำเช่นนี้?

ขอบคุณสำหรับความช่วยเหลือใด ๆ ฉันได้ลองสิ่งต่อไปนี้ด้วยความพึงพอใจน้อย:

  • File Renamer - นี่ทำให้ฉันสามารถเปลี่ยนชื่อไฟล์ที่ระบุจากรายการภายนอกใน. txt อย่างไรก็ตามเวอร์ชั่นทดลองนั้น จำกัด ไว้ที่ 500 รายการ ฉันไม่ต้องการจ่าย $ 20 เพียงสำหรับงานนี้

    อาจมีการติดตั้งไว้ในคอมพิวเตอร์ที่แยกจากกันหรือเครื่องเสมือนแม้ว่า

  • อัตโนมัติ - รับรายการที่ระบุ> เปลี่ยนชื่อ>

    ไม่เป็นอย่างที่ฉันคิด

เพียงมองหาวิธีที่ชาญฉลาดกว่านี้ ขอบคุณสำหรับความช่วยเหลือใด ๆ


OSX เวอร์ชันใด ตัวค้นหามีวิธีการที่ จำกัด แม้ว่าจะมีค่าตั้งแต่ 10.4 ขึ้นไป
bjbk

เวอร์ชัน OSX: El Capitan
Pete

คำตอบ:


11
  • การส่งออกเป็น CSV: สองคอลัมน์คั่นด้วย;(สมมติว่าไม่มี; ในชื่อไฟล์)
  • เปิดเทอร์มินัล
  • เปลี่ยนเป็นโฟลเดอร์ที่มีไฟล์
  • วิ่งperl -pi -e 's/\r\n/\n/;' LISTOFNAMES.csvเพื่อแก้ไขปัญหา CRLF
  • วิ่ง while IFS=\; read old new; do mv "$old" "$new"; done < LISTOFNAMES.csv

PS: นี่จะเขียนทับไฟล์ที่มีอยู่หากชื่อใหม่มีอยู่แล้ว

PPS: ทดสอบในโฟลเดอร์ชั่วคราวด้วยไฟล์เพียงไม่กี่ไฟล์ก่อน (และตรวจสอบให้แน่ใจว่าคุณมีข้อมูลสำรองล่าสุด)


ฉันได้รับสิ่งที่คุณหมายถึงเพียงแค่ใส่พวกเขาในคอลัมน์เดียว (คั่นด้วย;) ฉันพยายามที่มันได้ผล
Pete

นั่นคือปัญหาการสิ้นสุด CR / LF - เป็นไฟล์ที่สร้างขึ้นในเครื่อง Windows - ดูที่คำสั่ง dos2unix
ทำเครื่องหมาย

แอปพลิเคชันสเปรดชีตส่วนใหญ่บันทึกไฟล์ CSV ที่ส่งออกด้วยการสิ้นสุดบรรทัดหน้าต่างด้วยบรรทัดสุดท้ายที่ไม่สิ้นสุด แม้แต่ Excel ที่แย่ที่สุดบน Mac ก็สามารถบันทึกไฟล์ CSV ด้วย mac carriage return แบบเก่าได้ตามค่าเริ่มต้น ไฟล์ CSV ของคุณจะต้องได้รับการฆ่าเชื้อด้วยการตั้งค่าการสิ้นสุดบรรทัดเป็นบรรทัดใหม่และยุติบรรทัดสุดท้าย
fd0

2
ฉันได้รับสิ่งที่คุณหมายถึงเพียงแค่ใส่พวกเขาในคอลัมน์เดียว (คั่นด้วย;) ฉันลองมันใช้งานได้! ขอบคุณ
Pete

1
ชุดคั่นสำหรับreadคำสั่ง;(ที่จริงมันIFS=\; read old new) ดังนั้นถ้า CSV จะเป็นold-name;new-nameชื่อเก่าและใหม่จะได้รับการอ่านและold new
nohillside

5

ฉันพบสิ่งนี้เป็นหนึ่งในวิธีที่ง่ายที่สุด:

  • ในคอลัมน์สเปรดชีตต่อกัน: "cp oldfilename newfilename" เพื่อสร้างสำเนาด้วยชื่อใหม่
    • ใช้ "mv oldfilename newfilename" เพื่อแทนที่ไฟล์เก่าแทนที่จะคัดลอก
  • คัดลอกคอลัมน์ที่ต่อกันนี้ไปยังไฟล์ข้อความและบันทึกเป็น rename.sh ในโฟลเดอร์ที่มีไฟล์ที่จะเปลี่ยนชื่อ
  • เปิดเทอร์มินัลนำทางไปยังโฟลเดอร์พร้อมไฟล์ที่จะเปลี่ยนชื่อและรัน bash rename.sh

2

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

สมมติว่าคุณมีชื่อเก่าในคอลัมน์ A และชื่อใหม่ในคอลัมน์ B

เขียนสิ่งต่อไปนี้ลงในเซลล์แรกของคอลัมน์ C:

mv

เขียนสิ่งต่อไปนี้ลงในเซลล์แรกของคอลัมน์ D:

=concatenate("""",A1,"""")

เขียนสิ่งต่อไปนี้ลงในเซลล์แรกของคอลัมน์ E:

=concatenate("""",B1,"""")

แนะนำให้แอปพลิเคชันสเปรดชีต“ เติม> ลง” คอลัมน์ C, D และ E

จากนั้นคัดลอกแถวข้อมูลทั้งหมดจากคอลัมน์ C, D และ E วางข้อความที่คัดลอกลงในตัวแก้ไขข้อความ คุณควรอ่านแถว:

mv "old file name" "new file name"

คำสั่งนี้จะย้าย / เปลี่ยนชื่อไฟล์ที่ชื่อ“ ชื่อไฟล์เก่า” เป็น“ ชื่อไฟล์ใหม่” การทำเครื่องหมายชื่อไฟล์แบบเครื่องหมายคำพูดคู่จะช่วยให้ชื่อไฟล์มีช่องว่าง

หากคุณพอใจกับคำสั่งให้คัดลอกข้อความทั้งหมดไปยังเชลล์ใน Terminal.app

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

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