อักขระที่ไม่ถูกต้องสำหรับชื่อไฟล์ภายใต้ OS X คืออะไร


22

ฉันมีปัญหาในการค้นหาข้อมูลนี้และการทดลองและข้อผิดพลาดกำลังบอกฉันว่าอาจไม่มี อักขระที่ไม่ถูกต้องสำหรับชื่อไฟล์ใน OS X Lion (10.7) คืออะไร?


1
เฉือนไปข้างหน้าเดียว? แบ็กสแลชเดี่ยว งวดเดียวหรือสองครั้ง?

คำสั่งผสมทั้งหมดของสแลชและซิงเกิ้ลดูเหมือนจะใช้งานได้ แต่ช่วงเวลาหนึ่งและสองครั้งนั้นล้มเหลวเพราะมันถูกใช้งานแล้ว ฉันหวังว่าจะมีมากกว่านั้น .... :)
Rodney Foley

คุณไม่สามารถใช้ ASCII NUL ลองคิดดูสักพักแล้วคุณอาจเห็นว่าทำไมตัวเอง ...
Donal Fellows

@Donal ASCII NUL ไม่ใช่สิ่งที่คุณสามารถทำได้ง่ายๆเพียงแค่ "พิมพ์" หรือทำสิ่งที่เป็นปัญหาโดยไม่ได้ตั้งใจ
Rodney Foley

1
คุณช่วยให้บริบทเรา Rodney มันจะช่วยได้มากในการตอบคำถามนี้หากเราเข้าใจเล็กน้อยเกี่ยวกับสิ่งที่คุณพยายามจะทำ ... AFAIK มีปัญหาที่อาจเกิดขึ้นสองสามประการ: ตัวละครต้องห้ามที่ซื่อสัตย์ต่อพระเจ้าตัวละครที่ไม่สามารถป้อนได้ พา ธ ในเทอร์มินัลเชลล์และอักขระที่แสดงไม่ถูกต้องใน Finder
Shog9

คำตอบ:


7

HFS Plusอนุญาตให้ " Unicode อักขระใด ๆ รวมถึง NUL OS API อาจ จำกัด อักขระบางตัวด้วยเหตุผลดั้งเดิม"


3
Techincally ระบบไฟล์ HFS + ไม่อนุญาตให้ตัวอักษร Unicode ทั้งหมด (ตั้งแต่มันหมายถึงชื่อภายในเป็นสตริงปาสคาลที่มีความยาว 2 ไบต์) แต่ AFAIK ไม่มีของ API ที่มีให้โดย OS X ช่วยให้คุณสร้าง / เปิดไฟล์ด้วยเครื่องหมายทับ'/'หรือ NUL '\0'ในพวกเขา .
Adam Rosenfield

API ใน Carbon หรือ Cocoa ฉันถือว่า Terminal อยู่ภายใต้ข้อ จำกัด ดังกล่าว แต่สคริปต์อื่นที่รันโดยโปรแกรมอื่นเช่น launchd ล่ะ?
tobylane

8

อักขระที่ไม่ถูกต้องสำหรับชื่อไฟล์ภายใต้ OS X คืออะไร

wiki HFS + :

อักขระที่อนุญาตในชื่อไฟล์ Unicode อักขระใด ๆ รวมถึง NUL OS API อาจ จำกัด อักขระบางตัวด้วยเหตุผลดั้งเดิม


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


Bash ดูเหมือนจะอนุญาตให้ใช้อักขระควบคุมทั้งหมดยกเว้น\000(NUL) ฉันทดสอบโดยรันเอาต์พุตจาก:

for i in {1..31} 127 0; do echo touch \\$(bc <<< "obase=8;$i"); done

2

แก้ไข

ตามWikipediaตัวละครที่ไม่ถูกต้องเพียงตัวเดียวคือฟอร์เวิร์ดสแลช/แต่อยู่ที่เลเยอร์ UNIX


2
อาจ:ถูกห้ามใช้บน Mac OS Classic แต่ไม่แน่นอนบน Mac OS X— touch foo:barทำงานได้อย่างสมบูรณ์แบบ
Adam Rosenfield

1
อัปเดตคำตอบแล้ว คุณสามารถลบ downvote ของคุณได้

5
@Adam: :ใช้ได้ใน“ unix layer” แต่แปลเป็น / จาก/ใน“ เลเยอร์ Mac” (เช่น Finder, กล่องโต้ตอบที่เกี่ยวข้องกับไฟล์ส่วนใหญ่ ฯลฯ ): โคลอนถูกใช้เป็นตัวคั่นใน“ พา ธ HFS” "และเครื่องหมายทับจะใช้เป็นตัวคั่นใน" เส้นทาง POSIX "ดังนั้นจึงมีการแปลสองทางขึ้นอยู่กับ" เลเยอร์ "ที่คุณกำลังทำงานด้วย
Chris Johnsen

2
ดังนั้นไม่มีเครื่องหมายทับ ( /) หรือเครื่องหมายโคลอน ( :) เพื่อให้ปลอดภัย
Nicolas Miari

2
@NicolasMiari ใช่ Finder.app จะไม่อนุญาตให้คุณป้อนโคลอนและจะทำงานไม่ถูกต้องกับชื่อไฟล์ที่มีอยู่ เลเยอร์ UNIX จะไม่อนุญาตให้คุณทำงานกับไฟล์ที่มีเครื่องหมายสแลช (หรือค่อนข้างแปลว่ามันเป็นโคลอน) แล้วมีแอปพลิเคชั่นอื่น ๆ (เช่น Microsoft Word) ที่ทำให้หายใจไม่ออก ตัวอย่างเช่นหากคุณบันทึกเอกสารใน TextEdit.app ภายใต้ชื่อไฟล์foo/bar.docx(ใช้งานได้) Microsoft Word จะไม่สามารถเปิดได้
Konrad Rudolph
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.