ค้นหาอักขระ Windows ที่ผิดกฎหมายทั้งหมดในโฟลเดอร์และโฟลเดอร์ย่อย


1

ฉันต้องการสคริปต์ Automator ซึ่งค้นหาไฟล์ทั้งหมดที่มีอักขระ Windows ผิดกฎหมายเช่น<>:/\\|?*และแทนที่อักขระเหล่านี้ด้วยเครื่องหมายขีดล่าง ชื่อไฟล์ที่เหลือควรไม่เปลี่ยนแปลง

ฉันจะใช้เทอร์มินัลสคริปต์แทน ฉันรู้วิธีค้นหาด้วยfind . -name "*[<>:/\\|?*]*"แต่ฉันไม่รู้วิธีเปลี่ยนชื่ออย่างถูกต้อง

ฉันจะทำสิ่งนี้ได้อย่างไร


1
ระวังด้วย: - คุณอาจไม่มีไฟล์ที่มีตัวอักษรนั้นใน OS X ในทำนองเดียวกัน - การเขียนสคริปต์ด้วย bash กับ * นั้นเต็มไปด้วยพลัง / อันตราย ฉันจะทำการพัฒนาของคุณบนเครื่องที่สำรองข้อมูลไว้อย่างสมบูรณ์
bmike

ชื่อไฟล์ผิดกฎหมายล่ะ? คุณไม่มีไฟล์ชื่อ "con" ใน Windows ถ้าฉันจำได้ถูกต้อง
WayToDoor

คำตอบ:


1

ฉันพบ bash one-linerที่ค้นหาแต่ละไฟล์และโฟลเดอร์ที่มีอักขระที่ไม่ถูกต้องในชื่อและเปลี่ยนชื่อไฟล์ / โฟลเดอร์เปลี่ยนอักขระที่ไม่ถูกต้องแต่ละอันให้เป็นเส้นประ:

find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y=$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x") && mv -n "$x" "$y" ' \;

อาจเป็นไปได้ว่าไฟล์นั้นมีชื่อที่ผิดกฎหมายซึ่งจะได้รับการแก้ไขให้เป็นชื่อทางกฎหมายที่แน่นอนเหมือนกับไฟล์ที่มีชื่อผิดกฎหมายอื่น (ตัวอย่าง: ไฟล์สองไฟล์ชื่อ "fle") ซับหนึ่งด้านบนจะไม่เปลี่ยนชื่อไฟล์ที่สอง (หรือเพิ่มเติม) ที่ผิดกฎหมายซึ่งจะได้รับการแก้ไขเป็นชื่อเดียวกับไฟล์แรก ซึ่งหมายความว่าคุณอาจยังคงมีไฟล์ที่มีชื่อผิดกฎหมายหลังจากที่ทำงานแบบหนึ่งบรรทัด หลังจากที่คุณเรียกใช้หนึ่งซับนี้ทำงาน

find . -name "*[<>:\\|?*]*"

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

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