Tên tệp Linux / Windows / Unix / Unix: Ký tự nào được phép? Đó là không được giải thoát?


43

Những ký tự nào được phép và những ký tự nào phải được thoát trên dòng lệnh trong các hệ điều hành khác nhau?


Có một số câu trả lời hữu ích dưới đây, nhưng bạn đang cố gắng đạt được điều gì? Mã hóa các thói quen liệt kê danh sách trắng của nhân vật của bạn có lẽ không phải là con đường tốt nhất.
medina

Cảm ơn mọi người! Tất cả các câu trả lời đều hữu ích. Những gì tôi cần thông tin là: Tôi đang viết một công cụ sẽ gắn thẻ các tệp trên hệ thống tệp, bằng cách thay đổi tên của chúng (không có siêu dữ liệu).
java.is.for.desktop

Xem thêm câu trả lời trên superuser .
pevik

Câu trả lời:


27

Có một cuộc thảo luận về các ký tự tên tệp trong bài viết Wikipedia về Tên tệp .

Bạn có thể tìm thấy thông tin bài tiểu luận này: Sửa tên tệp Unix / Linux / POSIX .

Bài viết này so sánh OS X và Windows XP: X so với XP: Các ký tự bị cấm trong Tên tệp (PDF, xem trang khoảng 64-66).

Những thứ không nên có trong tên tệp cho $ 1.000 Alex

Tôi không biết những ký tự nào phải được bỏ qua, nhưng trong Linux, có lẽ không nên thoát khỏi các ký tự có thể có ý nghĩa đặc biệt như "n" (dòng mới), "t" (tab) và các ký tự khác, nhưng đó thường không phải là một vấn đề trong hoạt động tập tin. Có lẽ bạn có nghĩa là "thoát" chứ không phải "không thoát". Những cái phổ biến nhất là những cái mà shell sẽ diễn giải như không gian, ">", "<", v.v ... Xem một số bài viết tôi liên kết để thảo luận về những điều đó.


7
Đây không thực sự là một câu trả lời - tất cả các thông tin là bên ngoài. Và một số các liên kết bị hỏng bây giờ.
Steve Bennett

26

Các ký tự duy nhất không được phép trong tên tệp trong * nix là NUL/. Trong Windows, chỉ NUL, :\đang thực sự không được phép, nhưng nhiều ứng dụng hạn chế hơn nữa, cũng ngăn chặn ?, *, +, và %.

Không có bất kỳ ký tự nào trong tên tệp cần phải được thoát trừ khi được yêu cầu để không được giải thích bởi trình bao.


Điểm thứ hai xứng đáng được nhấn mạnh. Thông thường, thoát esc xuất hiện đề cập đến một cơ chế shell cho phép người dùng chỉ định các chuỗi (ví dụ: tên đường dẫn) có chứa các ký tự mà shell sẽ xử lý theo cách đặc biệt. Nếu OP có nghĩa là sử dụng một cái gì đó giống như phần trăm mã hóa phần cứng mã hóa để mã hóa các ký tự không được phép khác, thì đó là một giao thức hoàn toàn của ứng dụng đường dẫn tên lửa mà một chương trình liên quan phải áp dụng (hoặc không).
Chris Johnsen

Tôi đang quét một thư mục với readdir sau đó cố gắng mở các tệp có tên mà nó trả về. Một số trong số chúng không mở được bằng ENOENT, điều này cho thấy ngay cả đối với HĐH đôi khi bạn phải thoát?
gman

13

Nếu bạn tạo một tệp trên Windows bằng Explorer bằng một trong các ký tự sau, nó sẽ phàn nàn rằng các ký tự không được phép:

\ / : * ? " < > |

Một tài liệu tham khảo tốt ở đây:

Đặt tên tệp, đường dẫn và không gian tên http://msdn.microsoft.com/en-us/l Library / aa365247% 28VS85% 29.aspx

Microsoft tuyên bố thêm:

"... trên nền tảng máy tính để bàn dựa trên Windows, các ký tự đường dẫn không hợp lệ có thể bao gồm các ký tự ASCII / Unicode từ 1 đến 31, cũng như trích dẫn ("), nhỏ hơn (<), lớn hơn (>), pipe (|), backspace (\ b), null (\ 0) và tab (\ t). "

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


Tôi nhớ đã đọc một vài năm trước rằng Windows ở chế độ người dùng có những hạn chế đó cũng như không phân biệt chữ hoa chữ thường ("ABC.txt" === "abc.txt"). Tuy nhiên, Windows ở chế độ kernel có ít hạn chế hơn và phân biệt chữ hoa chữ thường ("ABC.txt"! == "abc.txt" giống như * NIX). Tuy nhiên, đối với tất cả ý định và mục đích, các ký tự trên sẽ áp dụng cho phần lớn các chương trình vì chúng chạy ở chế độ người dùng.
CubicleSoft

Tôi có thể thoát \ / : * ? " < > |tất cả chúng và tạo chúng bằng mkdir trên hệ thống GNU / Linux của tôi. Bạn có thể sử dụng mkdir '?'để tạo ?thư mục là tốt. Tôi đã sử dụng hệ thống tệp ramdisk và XFS để kiểm tra điều đó.
S.Goswami

5

Trên Linux và các hệ thống tương thích POSIX khác, "/" được dành riêng vì nó là dấu tách thư mục và "\ 0" (ký tự NULL) chỉ định phần cuối của chuỗi. Mọi thứ khác đều được cho phép.


1
Mặc dù chúng tôi khuyên bạn nên tránh các dòng mới, tab, ký tự điều khiển và những thứ tương tự, và để đảm bảo tên tệp là UTF-8 hợp lệ.
Flimm
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.