ชื่อไฟล์ Linux / Windows / Unix / …: อนุญาตให้ใช้อักขระใดบ้าง สิ่งใดที่ไม่ใช้ Escape


43

อนุญาตให้ใช้อักขระใดได้บ้างและต้องใช้อักขระใดในบรรทัดคำสั่งในระบบปฏิบัติการอื่น


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

ขอบคุณทุกคน! คำตอบทั้งหมดเป็นประโยชน์ สิ่งที่ฉันต้องการข้อมูลคือ: ฉันกำลังเขียนเครื่องมือที่จะแท็กไฟล์ข้ามระบบไฟล์โดยการเปลี่ยนชื่อ (ไม่มีข้อมูลเมตา)
java.is.for.desktop

ดูเพิ่มเติมตอบเกี่ยวกับsuperuser
pevik

คำตอบ:


26

มีการอภิปรายของตัวละครชื่อไฟล์ในบทความวิกิพีเดียเป็นชื่อไฟล์

คุณอาจพบนี้ข้อมูลเรียงความ: Fixing Unix / Linux / POSIX ชื่อไฟล์

บทความนี้เปรียบเทียบ OS X และ Windows XP: X กับ XP: อักขระต้องห้ามในชื่อไฟล์ (PDF ดู pp ประมาณ 64-66)

สิ่งที่ไม่ควรอยู่ในชื่อไฟล์สำหรับอเล็กซ์ $ 1,000

ฉันไม่ทราบว่าอักขระตัวใดที่ต้องมีการยกเว้นภาพ แต่ใน Linux อาจไม่ใช่ความคิดที่ดีที่จะหลีกเลี่ยงอักขระที่อาจมีความหมายพิเศษเช่น "n" (ขึ้นบรรทัดใหม่), "t" (แท็บ) และอื่น ๆ แต่โดยทั่วไปจะไม่มีปัญหาในการใช้งานไฟล์ บางทีคุณอาจหมายถึง "หลบหนี" มากกว่า "ไม่หลบหนี" สิ่งที่พบได้บ่อยที่สุดคือสิ่งที่เชลล์จะตีความเช่นช่องว่าง ">", "<" ฯลฯ ดูบทความบางส่วนที่ฉันเชื่อมโยงสำหรับการอภิปรายของสิ่งเหล่านั้น


7
นี่ไม่ใช่คำตอบจริงๆ - ข้อมูลทั้งหมดเป็นข้อมูลภายนอก และตอนนี้ลิงก์เหล่านั้นบางส่วนใช้งานไม่ได้
Steve Bennett

26

ตัวละครเพียงไม่ได้รับอนุญาตในชื่อไฟล์ในระวัง * เป็นและNUL /ใน Windows เท่านั้นNUL, :และ\อย่างแท้จริงไม่ได้รับอนุญาต แต่หลายแอป จำกัด ที่ต่อไปยังการป้องกัน?, *, และ+%

ไม่มีที่จุดที่ตัวอักษรใด ๆ ในชื่อไฟล์ที่จำเป็นที่จะหนียกเว้นตามที่จำเป็นเพื่อที่จะไม่ได้รับการตีความโดยเปลือก


จุดที่สองควรได้รับการเน้น โดยปกติแล้ว“ การหลบหนี” หมายถึงกลไกของเชลล์ที่อนุญาตให้ผู้ใช้ระบุสตริง (เช่นชื่อพา ธ ) ที่มีอักขระที่เชลล์จะใช้ในลักษณะพิเศษ หาก OP หมายถึงการใช้บางอย่างเช่น“ การเข้ารหัสเปอร์เซ็นต์” เพื่อเข้ารหัสอักขระที่ไม่ได้รับอนุญาตเป็นอย่างอื่นแสดงว่าเป็น“ ชื่อพา ธ โปรโตคอล” ของแอปพลิเคชันในระดับที่แท้จริงซึ่งแต่ละโปรแกรมที่เกี่ยวข้องจะต้องนำมาใช้
Chris Johnsen

ฉันกำลังสแกนโฟลเดอร์ที่มี readdir จากนั้นพยายามเปิดไฟล์ที่มีชื่อที่ส่งคืน บางส่วนของพวกเขาล้มเหลวที่จะเปิดด้วย ENOENT ซึ่งแนะนำแม้สำหรับระบบปฏิบัติการในบางครั้งคุณต้องหลบหนี?
gman

13

หากคุณสร้างไฟล์บน Windows ด้วย Explorer โดยใช้หนึ่งในตัวละครต่อไปนี้มันจะบ่นว่าตัวละครนั้นไม่ได้รับอนุญาต:

\ / : * ? " < > |

การอ้างอิงที่ดีอยู่ที่นี่:

การตั้งชื่อไฟล์เส้นทางและเนมสเปซ
http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx

Microsoft ระบุเพิ่มเติม:

"... บนแพลตฟอร์มเดสก์ท็อปที่ใช้ Windows อักขระพา ธ ที่ไม่ถูกต้องอาจประกอบด้วยอักขระ ASCII / Unicode 1 ถึง 31 เช่นเดียวกับ quote (") น้อยกว่า (<) มากกว่า (>), ไปป์ (|), backspace (\ b), null (\ 0) และแท็บ (\ t) "

http://msdn.microsoft.com/en-us/library/system.io.path.getinvalidpathchars.aspx


ฉันจำได้ว่าอ่านสองสามปีที่ผ่านมาว่าโหมดผู้ใช้ Windows มีข้อ จำกัด เหล่านั้นเช่นเดียวกับตัวพิมพ์เล็กและตัวพิมพ์เล็ก ("ABC.txt" === "abc.txt") อย่างไรก็ตามเคอร์เนลโหมด Windows มีข้อ จำกัด น้อยลงและคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ("ABC.txt"! == "abc.txt" เหมือนกับ * NIX) สำหรับทุกเจตนาและวัตถุประสงค์แม้ว่าอักขระข้างต้นจะใช้กับโปรแกรมส่วนใหญ่เพราะพวกเขาทำงานในโหมดผู้ใช้
CubicleSoft

ฉันสามารถหลบหนี\ / : * ? " < > |พวกเขาทั้งหมดและสร้างพวกเขาด้วย mkdir บนระบบ GNU / Linux ของฉัน คุณสามารถใช้mkdir '?'เพื่อสร้าง?ไดเรกทอรีได้เช่นกัน ฉันได้ใช้ระบบไฟล์ ramdisk และ XFS เพื่อทดสอบว่า
S.Goswami

5

บน Linux และระบบที่รองรับ POSIX อื่น ๆ "/" ถูกสงวนไว้เนื่องจากเป็นตัวคั่นไดเรกทอรีและ "\ 0" (อักขระ NULL) กำหนดจุดสิ้นสุดของสตริง ทุกอย่างอื่นที่ได้รับอนุญาต


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