Được coi là một cách thực hành tốt nhất để không sử dụng chữ in hoa trong đặt tên tệp?


28

Mọi người nói rằng bạn không nên sử dụng khoảng trắng trong đặt tên tệp Unix. Có lý do chính đáng để không sử dụng chữ in hoa trong tên tệp (nghĩa là File_Name.txtso với file_name.txt) không? Hay đây chỉ là vấn đề sở thích cá nhân?


Bạn có thể sử dụng mũ nhưng như một tiêu chuẩn không sử dụng nó. Chỉ cần sử dụng các chữ cái nhỏ và _ vì vậy file_name.txt là tốt.
Shabir A.

9
Có một số thứ Unixy sử dụng tên tệp bằng chữ in hoa ... một số ví dụ bao gồm Makefile, INSTALL, CHANGELOG và tất nhiên là README đáng kính.
Thomas

PSR-2 - tiêu chuẩn đặt tên thực tế của thế giới PHP, được điều hành bởi đa số trên Linux sử dụng camelCase php-fig.org/psr/psr-2
jdog

Câu trả lời:


46

Mọi người nói rằng bạn không nên có khoảng trắng trong việc đặt tên tệp Unix.

Mọi người nói rất nhiều điều. Có một số công cụ có thể làm hỏng, nhưng hy vọng chúng có số lượng ít tại thời điểm này, vì không gian là một loại virus được phổ biến bởi các tập đoàn hệ điều hành độc quyền tiêu dùng khổng lồ và bây giờ không thể tránh được.

Spaces làm cho việc chỉ định tên tệp trên dòng lệnh, v.v., thật khó xử. Đó là về nó. Các ký tự bị cấm phân loại duy nhất trên các hệ thống * nix là NUL (đừng lo lắng, nó không có trên bàn phím của bạn hoặc của bất kỳ ai khác) và /, vì đó là dấu phân cách đường dẫn. 1 Khác hơn bất cứ điều gì đi. Các thành phần đường dẫn riêng lẻ (tên tệp) được giới hạn ở 255 byte (một sự phức tạp có thể xảy ra nếu bạn đang sử dụng các bộ ký tự mở rộng) và hoàn thành các đường dẫn tới 4 KiB.

Hay đây chỉ là vấn đề sở thích cá nhân

Tôi sẽ nói rằng nó là. Của hầu hết DE dường như để tạo ra một loạt các thư mục vốn tại của bạn $HOME( Downloads, Desktop, Documents- các Dlà rất phổ biến), vì vậy không có gì kỳ lạ về nó. Ngoài ra còn có các tệp truyền thống rất phổ biến với chữ hoa trong đó, chẳng hạn như .Xclients.Xauthority.

Một giá trị của việc viết hoa ngay từ đầu là khi được liệt kê theo từ vựng, chúng sẽ đến trước những thứ viết thường - ít nhất, với nhiều công cụ và tùy thuộc vào ngôn ngữ.

Tôi là một fan hâm mộ của vỏ lạc đà (còn gọi là camelCase) và sử dụng nó với tên tệp, ví dụ: /home/goldilocks/blueSuedeShoes- đừng bận tâm đến những gì trong đó. Chắc chắn là một vấn đề sở thích cá nhân nhưng nó vẫn chưa khiến tôi đau buồn.

Các tệp lớp Java có xu hướng chứa thủ đô theo bản chất, vì các tên lớp Java có. Và tất nhiên, chúng ta đừng quên NetworkManager, ngay cả khi một số người trong chúng ta thích.


1. Có một nhiều hơn phân, khuyến cáo của POSIX "Portable Tên tập Character Set"không bao gồm các không gian - nhưng nó không bao gồm chữ hoa! POSIX cũng chỉ định các hạn chế chung hơn về "ký tự gạch chéo và byte rỗng" ở nơi khác trong cùng một tài liệu . Điều này phản ánh, hoặc được phản ánh trong, thực tiễn thông thường lâu đời .


5
Mia: "Đó có phải là sự thật không?" Vincent: "Không, không phải, đó chỉ là những gì tôi nghe được." Mia: "Ai nói với bạn điều này?" Vincent: "Họ." Mia: "Họ nói nhiều phải không?" Vincent: "Họ chắc chắn làm."
corsiKa

4
“Các giá trị của một cái gì đó tận lúc đầu là khi liệt kê thứ tự từ điển [...], họ sẽ quay trước khi mọi thứ khác.” - Dĩ nhiên, điều này chỉ hoạt động nếu phần lớn của tên tập tin được chữ thường, đem lại cho bạn một lý do để dự trữ mũ ( ít nhất là mũ hàng đầu ) cho READMEs và Makefiles của bạn và như vậy.
Blacklight Shining

4
Trên nhiều bàn phím, ctrl-space hoặc ctrl- @ hoặc alt-0 sẽ nhập NUL.
dubiousjim

2
@dodgethesteamler Tôi tin rằng bạn đã nhầm lẫn về dấu gạch chéo về phía trước (hay chính xác hơn là byte có giá trị 0x2F) trong ext *. Trên thực tế, tôi không tin rằng nó thậm chí sẽ đến hệ thống tập tin; lớp VFS sẽ không cho phép nó bất kể cửa hàng sao lưu.
zwol

3
chỉ không sử dụng khoảng trắng trong tên tệp và tên thư mục. ngay cả khi hệ thống của bạn về mặt kỹ thuật cho phép, nó sẽ chỉ khiến bạn đau buồn. Thay vào đó sử dụng "_" ký tự gạch dưới.
SnakeDoc

9

Một lý do để tránh giới hạn trong tên tệp là thứ tự sắp xếp trong Unix rất phân biệt chữ hoa chữ thường, vì vậy các tệp bắt đầu bằng chữ in hoa sẽ xuất hiện không theo thứ tự. Đó là lý do tại sao Makefilethường được đặt tên bằng cách sử dụng vốn M- đó là một trong những tệp bạn muốn xem đầu tiên, mà không cuộn / bỏ qua máng a-l.

Điều này nói rằng, bạn có thể làm tồi tệ hơn nhiều về tên tệp:

  • sử dụng khoảng trắng sẽ phá vỡ một số chương trình và tập lệnh được viết xấu mà không trích dẫn đúng tên tệp
  • bắt đầu một tên tệp -có thể gây ra vấn đề vì nhiều chương trình sẽ xem nó dưới dạng tùy chọn dòng lệnh thay vì tên tệp (ví dụ: rm -rsẽ không xóa tệp có tên -r).
  • bắt đầu một tên tệp với một .ý chí sẽ ẩn nó khỏi nhiều tiện ích và shell shellbing (ví dụ: rm *sẽ không xóa các tệp như .config)
  • sử dụng các ký tự đặc biệt như |<>*?và thậm chí các ký tự không in được như newlinekỹ thuật là có thể, nhưng có thể phá vỡ các tập lệnh / chương trình tương tự như ký tự không gian. Sự khác biệt là nhân vật không gian thường được sử dụng, vì vậy các lập trình viên có xu hướng kiểm tra chương trình của họ chống lại nó, trong khi các nhân vật ít phổ biến hơn vẫn chưa được kiểm tra.

4
Điều này có xu hướng không còn đúng nữa, sắp xếp theo các địa phương hiện đại có xu hướng không phân biệt chữ hoa chữ thường và nhiều công cụ và vỏ toàn cầu tôn vinh miền địa phương để sắp xếp tên tệp.
Stéphane Chazelas

2
Ý của bạn là: rm *sẽ không xóa các tập tin như thế .confignào?
tự đại diện

1
@Wildcard không thực sự, nhưng có lẽ ví dụ của bạn thực tế hơn của tôi. Quan điểm của tôi là chỉ ra rằng tên tệp bắt đầu bằng dấu chấm sẽ miễn nhiễm với tính năng toàn cầu ngay cả khi người dùng chỉ định rõ ràng dấu chấm đó.
Dmitry Grigoryev

1
@DmitryGrigoryev, không, họ không có. Hãy thử ls -ald. ?? * trong bất kỳ thư mục nào có tệp chấm.
Bill Barth

1
Tôi tin rằng sẽ phù hợp hơn khi nói "Nếu bạn chọn sử dụng chữ in hoa trong tên tệp, bạn nên nhớ thực tế rằng thứ tự sắp xếp trong Unix là (đôi khi) phân biệt chữ hoa chữ thường". Người dùng có thể muốn hành vi này, MakefileREADMElà ví dụ hoàn hảo về điều đó. Cũng lưu ý rằng hiệu ứng này là không đáng kể nếu chữ cái không phải là chữ cái đầu tiên trong tên, vì vậy nó không phải là vấn đề lớn nếu bạn sử dụng camelCase. Chắc chắn, bạn có thể ngạc nhiên khi thấy anOctagontrước đây angle, nhưng ít nhất họ sẽ ở cùng nhau trong danh sách.
G-Man nói 'Phục hồi Monica'

6

Nếu bạn định giao diện với môi trường Windows, bạn nên tránh viết hoa vì Windows sẽ viết thường mọi thứ. Đây thường là một vấn đề đi theo cách khác; một liên kết đến Page_2.htmlsẽ tìm thấy page_2.htmltrong Windows, nhưng sẽ thất bại trong Unix.


10
Đo không phải sự thật. NTFS, VFAT và exFAT đều không phân biệt chữ hoa chữ thường nhưng bảo quản chữ hoa, nghĩa là chúng bỏ qua trường hợp cho mục đích tra cứu, nhưng dù sao cũng lưu trữ trường hợp. Điều tương tự cũng áp dụng cho HFS +, hệ thống tệp mặc định trên OSX. NTFS thậm chí còn có một không gian tên POSIX hoạt động chính xác như tất cả các Unice khác, tức là tên tệp rất dài của các octet chưa được giải thích, chỉ có NUL/bị cấm.
Jörg W Mittag

5
Hơn nữa, "không phân biệt chữ hoa chữ thường nhưng giữ nguyên trường hợp" là một cách khác để nói "có khả năng âm thầm ghi đè tệp A vì tên của nó chỉ khác trong trường hợp từ tệp B" (hoặc ngược lại, tùy thuộc vào trường hợp nào được lưu sau này). Nói cách khác, nếu bạn đang sử dụng shell * nix để truy cập chia sẻ NTFS, cat > Foosẽ ghi đè lên tệp foo. Hành vi này có thể gây bất ngờ và khó hiểu nếu bạn đã quen với các hệ thống tập tin phân biệt chữ hoa chữ thường chữ hoa chữ thường như ext *.
dodgethesteamler

1
@ JörgWMittag Trừ khi tôi nhầm, NTFS không phân biệt chữ hoa chữ thường, chỉ là các cửa sổ hoạt động theo những cách bí ẩn.
Cthulhu

1
@Cthulhu: AFAIK, NTFS có bốn không gian tên khác nhau trong đó bạn có thể tạo tên cho các tệp. (Tuy nhiên, tôi không biết liệu một tệp có thể có một tên trong nhiều không gian tên hay không.) Không gian tên "DOS" (8.3, không phân biệt chữ hoa chữ thường), một không gian tên "dài" (không phân biệt chữ hoa chữ thường, bảo quản trường hợp, UTF-16), một không gian tên đặc biệt cho các tên "ngắn dài", tức là các tên có trường hợp cần được bảo tồn nhưng phù hợp với 8.3 và một không gian tên POSIX (một dòng bát phân khác \0và phân /biệt chữ hoa chữ thường). Ít nhất đó là cách tôi nhớ nó. Nhưng tôi đồng ý rằng đó là một mớ hỗn độn. Có những hạn chế hơn nữa trong trận đấu
Jörg W Mittag

1
Hạt nhân, và thậm chí các hạn chế hơn nữa trong API (thực tế, có các API khác nhau từ các thời đại khác nhau với các hạn chế khác nhau), có các hạn chế do tương thích với DOS và FAT, có các hạn chế trong trình thông dịch lệnh, có các hạn chế trong ( đồ họa) shell và có những hạn chế trong Explorer. Và thường không thể xác định một cách đáng tin cậy nơi một hạn chế đến từ đâu. Thật là điên rồ. Tôi đã từng quản lý để tạo một tệp bằng Explorer , không thể mở, sao chép, di chuyển, đổi tên hoặc xóa bằng bất kỳ công cụ nào tôi đã thử. Về cơ bản, nó vẫn ở trên đường
Jörg W Mittag

4

Một lý do để tránh giới hạn là tính năng bashtab của nó phân biệt chữ hoa chữ thường (ít nhất là theo mặc định) .ththth vẫn tiếp tục gặp tôi mỗi khi tôi kết thúc trước một bashcấu hình mặc định. Chắc chắn, có các shell phổ biến khác, nhưng điều này kết hợp với thực tế bashlà shell đăng nhập mặc định trên nhiều hệ điều hành có nghĩa là mặc định là hoàn thành phân biệt chữ hoa chữ thường. Sử dụng tên tệp chữ thường thay vì đơn giản hóa mọi thứ ở đây.


2
echo set completion-ignore-case On >> ~/.inputrccó thể giúp một chút, ít nhất là trên hệ thống của riêng bạn.
wchargein

1
Tôi không rõ ý nghĩa của câu trả lời này là gì - trừ khi bạn có thể quên cách bạn đánh vần tên một tên tập tin. Ví dụ: nếu bạn tạo một tệp có tên Foovà loại mới hơn cat f(Tab), nó sẽ thất bại. Nhưng điều tương tự cũng xảy ra nếu bạn nhập cat foo, cat Foobarhoặc cat Fu- thực tế là bạn sẽ gặp khó khăn khi truy cập một tệp có tên mà bạn không nhớ chính xác không thực sự có liên quan đến tự động hoàn tất.
G-Man nói 'Tái lập Monica'

@ G-Man Touché. Tuy nhiên, sử dụng tên tệp chữ thường có nghĩa là bạn có một điều ít nhớ về chúng.
Blacklight Shining

3

Vì NL_Derek đã mở hộp giun này, nhưng không nói rõ nó, tôi sẽ nói điều này:

Bạn có thể sử dụng chữ in hoa, nhưng bạn nên tránh tạo các tệp (trong cùng thư mục) chỉ khác nhau theo từng trường hợp , ví dụ, File_Name.txt file_name.txt , bởi vì

  • Nếu bạn bằng cách nào đó làm cho thư mục có sẵn cho một hệ thống Windows, nó sẽ không thể truy cập cả hai tệp. Nó có thể sẽ chỉ có thể truy cập tên xuất hiện đầu tiên trong thư mục, bất kể bạn sử dụng tên nào. (Ngoại trừ: nó có thể cung cấp cho bạn quyền truy cập vào chúng dưới dạng FILENA~1.TXTFILENA~2.TXT - dir /xđể xem tên ngắn (nếu có) đi với tên dài nào.)
  • Nếu hệ thống tệp thực sự là hệ thống tệp Windows (ví dụ: được gắn từ hệ thống tệp exFAT hoặc NTFS từ máy chủ NFS chạy Windows), hai tên (có thể) sẽ không được phép cùng tồn tại. Ví dụ: nếu bạn làm và , bạn có thể kết thúc bằng một tệp duy nhất, chứa đầu ra từ .cmd1 > foocmd2 > Foocmd2
  • Tương tự, nếu bạn từng chuyển các tệp sang hệ thống Windows, hai tên (có thể) sẽ không được phép cùng tồn tại. Ví dụ: nếu bạn đã tạo một kho lưu trữ (ví dụ: zip) chứa hai tệp và trích xuất nó trên hệ thống Windows, thì tệp thứ hai có thể sẽ ghi đè lên tệp đầu tiên. Điều tương tự nếu bạn chuyển chúng vào một hộp Windows có FTP hoặc một cái gì đó tương tự.

Không chỉ Windows, mà một số hệ điều hành khác (VMS, tôi nghĩ, CP / M chắc chắn, những người khác ...)
Toby Speight

3

Ngoài lý do kỹ thuật, tôi có một khía cạnh thực tế cho việc này. Bám sát các chữ cái viết thường sẽ đảm bảo rằng các tìm kiếm dễ dàng hơn trừ khi người ta quá thích sử dụng grep -i hoặc định vị -i. Đôi khi, ngay cả camelCase cũng có thể gây nhầm lẫn nếu người ta phải sử dụng một chuỗi các từ giống như trường hợp lưu trữNYCDCPrimary. Vì vậy, tôi thấy tốt nhất là bám vào chữ thường và tiêu chúng bằng dấu gạch dưới hoặc dấu gạch nối để dễ đọc, như Storage_nyc_dc_primary.


Snake_case rất dễ nhìn - storageNycDcPrimaryStorageNycDcPrimarycả hai đều lạ khi đọc.
go2null

1

Tôi nghĩ rằng đó là cách tốt nhất để tránh sử dụng chữ hoa và khoảng trắng trong tên tệp.

Một số người sẽ nói rằng họ không đồng ý nhưng đó là vấn đề hoặc điều mà tôi gọi là niềm tin tôn giáo : khó thảo luận và đồng ý. Những người không đồng ý nói rằng hầu hết các công cụ hiện đã được cố định là thủ đô và không gian thân thiện: chúng đúng nhưng đây không phải là câu hỏi.

Câu hỏi đúng là bạn cần bao nhiêu để sử dụng chữ hoa và khoảng trắng trong tên tệp. Đối với câu hỏi này, ngoại trừ khi tôi đang lập trình bằng Java, câu trả lời chủ yếu là mọi lúc: Tôi không cần chữ hoa và khoảng trắng trong tên tệp của mình . Tất cả các khoảng trắng tôi thay thế bằng dấu gạch dưới ( _) hoặc dấu trừ ( -) và do đó tôi không sử dụng trường hợp lạc đà (còn gọi là camelCase) trái với một số tôn giáo khác.

Nhiều người gọi tôi là nhảm nhí vì đã làm và dạy rằng - một số trong số họ vẫn làm - một số trong số họ vấp phải một công cụ không thân thiện với vốn / không gian và nói với tôi rằng tôi đã đúng và họ nên lắng nghe tôi. Làm bất cứ điều gì bạn muốn , và nếu bạn sử dụng chữ hoa và khoảng trắng trong tên tệp, tôi hy vọng bạn sẽ không bao giờ vấp phải một công cụ viết kém. Tuy nhiên, nếu bạn truy cập vào công cụ như vậy, hy vọng một lần nữa, sẽ không khó để sửa chữa và sẽ không tốn chi phí cho doanh nghiệp của bạn và / hoặc bạn rất nhiều tiền và / hoặc thời gian. Nhưng nếu cuối cùng nó có hậu quả xấu, bạn sẽ nhớ rằng một số người đã nói với bạn trong quá khứ rằng sử dụng chữ viết hoa và khoảng trắng trong tên tệp là thông lệ xấu.

Và một điều cuối cùng, nếu bạn muốn tránh tất cả các vấn đề , không có ký tự đặc biệt nào trong tên tệp (chỉ có chữ in thường, chữ số, dấu gạch dưới và dấu trừ [1]). Danh sách nhân vật không mong muốn này cũng bao gồm tất cả các nhân vật không phải ascii (vâng, người Pháp và những người không phải tiếng Anh khác - và tôi là một trong số họ - không ai trong số họ: à, â, ä, ç, é, ..., ö, æ, , ...). Điều này cũng mở rộng cho nhiều thứ khác, bao gồm cả đăng nhậpmật khẩu . Tôi sẽ cho bạn đoán điều gì xảy ra khi bạn đặt một trích dẫn hoặc trích dẫn kép ( 'hoặc ") trong một thông tin đăng nhập hoặc mật khẩu được xử lý bởi một tập lệnh bash không được viết bởi một sysadmin đã xác nhận ....

[1]: có lẽ chúng ta có thể mở rộng đến ~, @, #và một số người khác, nhưng điều này đang tìm kiếm rắc rối (và vâng tôi biết về các tập tin emacs ...).


1
Điều cuối cùng là một cái gì đó nên được xử lý bởi hệ thống xác thực, không phải người dùng đến với mật khẩu. Nếu hệ thống giới hạn tập hợp các ký tự được phép trong mật khẩu, thì đó là một hệ thống xấu.
Blacklight Shining

Chà, giới hạn các ký tự trong mật khẩu là một chủ đề để tranh luận: li1, oO0, ... tùy thuộc vào sự ưa thích, khó giao tiếp. Một số người sẽ nói rằng mật khẩu không nên được truyền đạt, nhưng Khóa WiFi là một loại mật khẩu mà tôi liên lạc với bạn bè khi họ ở chỗ tôi ...
jfg956

Đó là một lựa chọn có ý thức từ phía bạn để tránh sử dụng một số ký tự, thay vì giới hạn được tích hợp trong hệ thống (trong ví dụ này là các tiêu chuẩn Wi-Fi, AP và triển khai ứng dụng khách, v.v.). Nếu bạn đang sử dụng một chuỗi các ký tự được chọn ngẫu nhiên làm mật khẩu, bạn có thể cải thiện khả năng đọc bằng cách sử dụng (hoặc khuyến khích người nhận sử dụng) phông chữ đơn cách hoặc đơn giản bằng cách sử dụng glyphs đặc biệt hơn nếu bạn viết tay L, chữ hoa I và chữ số 1; chữ thường chữ O nhỏ hơn, chữ hoa chữ O tròn hơn, chữ số gạch chéo hoặc chấm 0; v.v.). Ngoài ra, bạn có thể sử dụng cụm mật khẩu.
Blacklight Shining
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.