ฉันพบ bash one-linerที่ค้นหาแต่ละไฟล์และโฟลเดอร์ที่มีอักขระที่ไม่ถูกต้องในชื่อและเปลี่ยนชื่อไฟล์ / โฟลเดอร์เปลี่ยนอักขระที่ไม่ถูกต้องแต่ละอันให้เป็นเส้นประ:
find . -name "*[<>:\\|?*]*" -exec bash -c 'x="{}"; y=$(sed "s/[<>:\\|?*]\+/-/g" <<< "$x") && mv -n "$x" "$y" ' \;
อาจเป็นไปได้ว่าไฟล์นั้นมีชื่อที่ผิดกฎหมายซึ่งจะได้รับการแก้ไขให้เป็นชื่อทางกฎหมายที่แน่นอนเหมือนกับไฟล์ที่มีชื่อผิดกฎหมายอื่น (ตัวอย่าง: ไฟล์สองไฟล์ชื่อ "fle") ซับหนึ่งด้านบนจะไม่เปลี่ยนชื่อไฟล์ที่สอง (หรือเพิ่มเติม) ที่ผิดกฎหมายซึ่งจะได้รับการแก้ไขเป็นชื่อเดียวกับไฟล์แรก ซึ่งหมายความว่าคุณอาจยังคงมีไฟล์ที่มีชื่อผิดกฎหมายหลังจากที่ทำงานแบบหนึ่งบรรทัด หลังจากที่คุณเรียกใช้หนึ่งซับนี้ทำงาน
find . -name "*[<>:\\|?*]*"
อีกครั้งเพื่อระบุไฟล์ที่มีชื่อผิดกฎหมายที่ยังคงมีอยู่ วิธีหนึ่งในการจัดการกับสถานการณ์นี้คือการเปลี่ยนเส้นประในการทดแทน sed เพื่อตัวละครอื่นเช่นขีดล่างและเรียกใช้ซับหนึ่งอีกครั้ง