2009-08-21 26 views
41

Nếu tôi muốn tạo ra một chuỗi mà được đảm bảo không để đại diện cho một tên tập tin, tôi có thể đặt một trong những nhân vật sau đây trong nó trên Windows:Có bất kỳ tên tệp linux không hợp lệ nào không?

\/: * ? | < > 

ví dụ

this-is-a-filename.png 

?this-is-not.png 

Có cách nào để xác định một chuỗi như 'không thể là một tập tin' trên Linux?

+0

Khá chắc chắn ''/'' ít nhất là không được phép (hoặc sẽ là một PITA hoàn chỉnh nếu nó không được) –

+1

char * str = "foo/bar"; có thể rất tốt đại diện cho một tệp mặc dù – nos

Trả lời

35

Có hầu như không có giới hạn - ngoài '/''\0', bạn được phép sử dụng bất kỳ thứ gì. Tuy nhiên, some people nghĩ rằng nó không phải là một ý tưởng tốt để cho phép sự linh hoạt này nhiều.

+5

+ nó có thể phụ thuộc vào hệ thống tệp đang được sử dụng. –

+0

Tính linh hoạt khiến bạn gặp rắc rối vì rất nhiều ứng dụng xử lý tên tệp dưới dạng chuỗi văn bản - và bạn nhận được tất cả các loại sự cố mã hóa ký tự. Và đó chỉ là vấn đề rõ ràng với nó :) – nos

+2

Tôi thực sự nghĩ rằng ít nhất một số hệ thống tập tin có thể hỗ trợ 'NUL'. –

7

Chuỗi trống là tên đường dẫn thực sự không hợp lệ duy nhất trên Linux, có thể hoạt động cho bạn nếu bạn chỉ cần một tên không hợp lệ. Bạn cũng có thể sử dụng chuỗi như "///foo", không phải là tên đường dẫn canonical, mặc dù nó có thể tham chiếu đến tệp ("/foo"). Một khả năng khác sẽ là một cái gì đó như "/dev/null/foo", vì /dev/null có một ý nghĩa phi thư mục được định nghĩa POSIX. Nếu bạn chỉ cần chuỗi không thể tham chiếu đến tệp thông thường, bạn có thể sử dụng "/" hoặc ".", vì đó luôn là các thư mục.

-2

Cá nhân tôi thấy rằng rất nhiều thời gian vấn đề không phải là Linux nhưng các ứng dụng đang sử dụng trên Linux.

Lấy ví dụ Amarok. Gần đây tôi nhận thấy rằng một số nghệ sĩ tôi đã sao chép từ máy tính Windows của tôi không xuất hiện trong thư viện. Tôi kiểm tra và xác nhận rằng các tập tin đã có và sau đó tôi nhận thấy rằng một số ký tự trong tên thư mục (được đặt tên cho nghệ sĩ) được biểu diễn bằng một hình vuông kỳ lạ hơn là một ký tự thực.

Trong thiết bị đầu cuối vỏ, tên tệp trông lạ hơn:/Music/Albums/Einst $ '\ 374'rzende \ Neubauten là một ví dụ về sự kỳ lạ.

Trong khi các tệp này chắc chắn ở đó, Amarok không thể thấy chúng vì lý do nào đó. Tôi đã có thể sử dụng một số trickery vỏ để đổi tên chúng thành các phiên bản lành mạnh mà tôi có thể sau đó lại tên với ký tự chỉ ASCII bằng cách sử dụng Musicbrainz Picard. Thật không may, Picard cũng không thể mở các tập tin cho đến khi tôi đổi tên chúng, do đó sự cần thiết cho một kịch bản shell. Nhìn chung đây là một khu vực phức tạp và dường như rất khó khăn nếu bạn đang cố gắng đồng bộ hóa một bộ sưu tập nhạc giữa Windows và Linux trong đó một số tên tập tin hoặc thư mục chứa các ký tự funky.

Điều an toàn nhất cần làm là gắn vào tên tệp chỉ có ASCII.

+1

Điều này không giải quyết được câu hỏi tôi sợ. – Mat

+0

Tôi không đồng ý.Về mặt kỹ thuật, hệ thống tệp NTFS hỗ trợ tất cả các loại tính năng thú vị mà "ứng dụng" chính sử dụng nó (Windows) không xem xét hợp lệ hoặc sử dụng. – OOPMan

+0

có vẻ như hộp Windows của bạn đã sử dụng mã hóa khác với ngôn ngữ linux của bạn. miễn là tên tập tin của bạn được mã hóa bằng cách sử dụng cùng một mã hóa như miền địa phương của bạn, bạn nên sử dụng ký tự rộng, mặc dù bạn đã đúng là an toàn hơn khi sử dụng ascii. –

Các vấn đề liên quan