Czy uważa się za najlepszą praktykę, aby nie używać wielkich liter w nazewnictwie plików?

28

Ludzie mówią, że nie powinieneś używać spacji w nazwach plików Uniksa. Czy istnieją dobre powody, aby nie używać wielkich liter w nazwach plików (tj. File_Name.txtVs. file_name.txt)? Czy to tylko kwestia osobistych preferencji?

DD343
źródło
Możesz używać czapek, ale jako standard nie używaj go. Wystarczy użyć małych liter i _, więc nazwa_pliku.txt jest dobra.
Shabir A.,
9
Istnieje kilka uniksowych rzeczy, które używają nazw plików z dużymi literami ... niektóre przykłady to Makefile, INSTALL, CHANGELOG i oczywiście czcigodny README.
Thomas
PSR-2 - de facto standard nazewnictwa w świecie PHP, który działa w większości w systemie Linux, używa camelCase php-fig.org/psr/psr-2
jdog

Odpowiedzi:

46

Ludzie mówią, że nie powinieneś używać spacji w nazwach plików Uniksa.

Ludzie mówią wiele rzeczy. Istnieje kilka narzędzi, które mogą się zepsuć, ale mam nadzieję, że w tej chwili jest ich niewiele, ponieważ przestrzenie są wirusem rozprzestrzenianym przez gigantyczne korporacje prawnie zastrzeżone, a teraz niemożliwym do uniknięcia.

Spacje powodują, że określenie nazw plików w wierszu poleceń itp. Jest niewygodne. O to chodzi. Jedynymi kategorycznie zabronionymi znakami w systemach * nix są NUL (nie martw się, nie ma to na klawiaturze ani na nikim innym), a /ponieważ jest to separator ścieżek. 1 Poza tym wszystko idzie. Poszczególne elementy ścieżki (nazwy plików) są ograniczone do 255 bajtów (możliwa komplikacja, jeśli używasz rozszerzonych zestawów znaków) i pełne ścieżki do 4 KiB.

Czy to tylko kwestia osobistych preferencji

Powiedziałbym, że tak. Większość DE zdają się stworzyć mnóstwo aktywowanych katalogów w $HOME( Downloads, Desktop, Documents- w Djest bardzo popularne), więc nie ma nic o tym dziwaczne. Istnieją również bardzo powszechne tradycyjne pliki z wielkimi literami, takie jak .Xclientsi .Xauthority.

Zaletą wielkich liter na początku jest to, że po leksykograficznym ułożeniu na liście będą one pojawiać się przed małymi literami - przynajmniej z wieloma narzędziami i zależą od lokalizacji.

Jestem fanem wielbłąda (aka. CamelCase) i używam go z nazwami plików, np. /home/goldilocks/blueSuedeShoes- nieważne, co tam jest. Zdecydowanie kwestia osobistych preferencji, ale to jeszcze nie spowodowało mojego smutku.

Pliki klas Java zwykle zawierają wielkie litery, ponieważ nazwy klas Java tak. I oczywiście nie zapominajmy NetworkManager, nawet jeśli niektórzy z nas wolą.


1. Istnieje znacznie bardziej ograniczony, zalecany przez POSIX „Zestaw znaków przenośnej nazwy pliku , który nie zawiera spacji - ale zawiera wielkie litery! POSIX określa również bardziej ogólne ograniczenie dotyczące „znaku ukośnika i bajtu zerowego” w innym miejscu tego samego dokumentu . Odzwierciedla to lub znajduje odzwierciedlenie w długoletnich konwencjonalnych praktykach .

Złotowłosa
źródło
5
Mia: „Czy to fakt?” Vincent: „Nie, nie jest, to tylko to, co słyszałem”. Mia: „Kto ci to powiedział?” Vincent: „Oni”. Mia: „Dużo rozmawiają, prawda?” Vincent: „Z pewnością tak”.
corsiKa
4
Wartość wielkich liter na początku polega na tym, że kiedy są wymienione leksykograficznie […], staną na pierwszym miejscu”. - Oczywiście działa to tylko wtedy, gdy większość nazw plików jest pisana małymi literami, co daje powód do rezerwowania wielkich liter ( przynajmniej prowadzące czapki) dla READMES i MakefileS i tak dalej.
Blacklight Shining
4
Na wielu klawiaturach ctrl-space lub ctrl- @ lub alt-0 wpiszą NUL.
dubiousjim
2
@dodgethesteamroller Uważam, że całkowicie się mylisz co do ukośnika do przodu (a ściślej bajtu o wartości 0x2F) w ext *. W rzeczywistości nie wierzę, że nawet dostanie się do systemu plików; warstwa VFS nie zezwala na to bez względu na magazyn kopii zapasowych.
zwolnienie
3
po prostu nie używaj spacji w nazwach plików i nazwach katalogów. nawet jeśli twój system na to pozwala technicznie, spowoduje to tylko twój smutek. Zamiast tego użyj znaku podkreślenia „_”.
SnakeDoc
9

Jednym z powodów, aby unikać wielkich liter w nazwach plików, jest to, że w porządku sortowania w Uniksie rozróżniana jest wielkość liter, więc pliki zaczynające się od dużej litery będą wyświetlane w porządku. Dlatego Makefilezwykle jest nazywany za pomocą dużej litery M- jest to jeden z plików, który chcesz zobaczyć jako pierwszy, bez przewijania / pomijania w dół koryta a-l.

To powiedziawszy, możesz zrobić znacznie gorzej, jeśli chodzi o nazwy plików:

  • używanie spacji spowoduje uszkodzenie niektórych źle napisanych programów i skryptów, które nie podają poprawnie nazw plików
  • uruchomienie nazwy pliku z -może powodować problemy, ponieważ wiele programów zobaczy ją jako opcję wiersza polecenia zamiast nazwy pliku (np. rm -rnie usunie pliku o nazwie -r).
  • rozpoczęcie nazwy pliku od .spowoduje ukrycie go przed wieloma narzędziami i globowanie powłoki (np. rm *nie usunie plików takich jak .config)
  • użycie znaków specjalnych, |<>*?a nawet znaków niedrukowalnych, newlinejest technicznie możliwe, ale może uszkodzić skrypty / programy podobne do znaku spacji. Różnica polega na tym, że często używa się znaku spacji, więc programiści testują na nim swoje programy, podczas gdy mniej popularne postacie często pozostają nietestowane.
Dmitrij Grigoriew
źródło
4
Nie jest to już prawdą, sortowanie we współczesnych lokalizacjach zwykle nie uwzględnia wielkości liter, a wiele narzędzi i globów powłoki honoruje ustawienia regionalne dla sortowania nazw plików.
Stéphane Chazelas
2
Czy chciałeś powiedzieć: rm *nie usunie takich plików .config?
Wildcard
1
@ Wildcard nie bardzo, ale być może twój przykład jest bardziej realistyczny niż mój. Chodzi mi o to, aby pokazać, że nazwy plików zaczynające się od kropki są odporne na globowanie, nawet jeśli użytkownik wyraźnie określi tę kropkę.
Dmitry Grigoryev
1
@DmitryGrigoryev, nie, nie są. Wypróbuj ls -ald. ?? * w dowolnym katalogu z plikami kropkowymi.
Bill Barth
1
Uważam, że właściwsze byłoby powiedzenie „Jeśli zdecydujesz się używać wielkich liter w nazwach plików, powinieneś pamiętać, że w porządku sortowania w Uniksie (czasem) rozróżniana jest wielkość liter”. Użytkownik może chcieć tego zachowania Makefilei READMEsą tego doskonałym przykładem. Zauważ również, że efekt ten jest nieistotny, jeśli litera nie jest pierwszą literą w nazwie, więc nie jest to wielka sprawa, jeśli używasz camelCase. Oczywiście, może być zaskoczony, aby zobaczyć anOctagonprzed angle, ale przynajmniej byliby razem w zestawieniu.
G-Man mówi „Reinstate Monica”
6

Jeśli zamierzasz łączyć się ze środowiskiem Windows, powinieneś unikać wielkich liter, ponieważ Windows wszystko małymi literami. Częściej jest to problem idący w drugą stronę; link do Page_2.htmlznajdzie się page_2.htmlw Windows, ale nie powiedzie się w Uniksie.

NL_Derek
źródło
10
To nieprawda. NTFS, VFAT i exFAT nie rozróżniają wielkości liter, ale zachowują wielkość liter, co oznacza, że ignorują wielkość liter do celów wyszukiwania, ale mimo to przechowują wielkość liter. To samo dotyczy HFS +, domyślnego systemu plików w OSX. NTFS ma nawet przestrzeń nazw POSIX, która działa dokładnie tak , jak wszystkie inne Uniksy, tj. Bardzo długie nazwy plików nieprzetłumaczonych oktetów, z tylko NULi /zabronionymi.
Jörg W Mittag
5
Co więcej, „bez rozróżniania wielkości liter, ale z zachowaniem wielkości liter” to inny sposób powiedzenia „zdolny do cichego nadpisywania pliku A, ponieważ jego nazwa różni się tylko w przypadku od pliku B” (lub odwrotnie, w zależności od tego, który zapisano później). Innymi słowy, jeśli używasz powłoki * nix w celu uzyskania dostępu do udziału NTFS, cat > Foonadpisze plik foo. To zachowanie może być nieoczekiwane i mylące, jeśli przyzwyczaiłeś się do systemów plików z zachowaniem wielkości liter i rozróżnianiem wielkości liter, takich jak ext *.
dodgethesteamroller
1
@ JörgWMittag O ile się nie mylę, NTFS nie rozróżnia wielkości liter, po prostu system Windows działa w tajemniczy sposób.
Cthulhu
1
@Cthulhu: AFAIK, NTFS ma cztery różne przestrzenie nazw, w których można tworzyć nazwy plików. (Nie wiem jednak, czy pojedynczy plik może mieć nazwę w więcej niż jednej przestrzeni nazw.) Przestrzeń nazw „DOS” (8.3, bez rozróżniania wielkości liter), „długa” przestrzeń nazw (bez rozróżniania wielkości liter, z zachowaniem wielkości liter, UTF-16), specjalna przestrzeń nazw dla „krótkich długich” nazw, tj. Nazw, których wielkość liter powinna być zachowana, ale które pasują do 8.3, oraz przestrzeń nazw POSIX (strumień oktetów innych niż \0i /, z rozróżnianiem wielkości liter). Przynajmniej tak to pamiętam. Ale zgadzam się, że to trochę bałagan. Istnieją dalsze ograniczenia w…
Jörg W Mittag
1
… Jądro, a nawet dalsze ograniczenia w interfejsie API (w rzeczywistości istnieją różne interfejsy API z różnych epok z różnymi ograniczeniami), istnieją ograniczenia wynikające z kompatybilności z DOS i FAT, istnieją ograniczenia w interpretatorze poleceń, istnieją ograniczenia w ( graficzna) powłoka, aw Eksploratorze istnieją ograniczenia. I często niemożliwe jest wiarygodne ustalenie, skąd pochodzi ograniczenie. To jest szalone. Kiedyś udało mi się utworzyć plik za pomocą Eksploratora , którego nie można było otworzyć, skopiować, przenieść, zmienić nazwy ani usunąć za pomocą żadnego narzędzia, którego wypróbowałem. Zasadniczo pozostał…
Jörg W Mittag
4

Jednym z powodów, dla których należy unikać bashwielkich liter, jest to, że w wypełnianiu tabulatorów rozróżniana jest wielkość liter (przynajmniej domyślnie) - wciąż mnie to denerwuje za każdym razem, gdy skończę bashprzy domyślnej konfiguracji. Jasne, istnieją inne popularne powłoki, ale w połączeniu z faktem, że bashjest to domyślna powłoka logowania w wielu systemach operacyjnych, oznacza to, że domyślnie często jest rozróżniana wielkość liter. Używanie nazw małych liter raczej upraszcza tutaj sprawy.

Blacklight Shining
źródło
2
echo set completion-ignore-case On >> ~/.inputrcmoże trochę pomóc, przynajmniej we własnym systemie.
wchargin
1
Nie mam jasności, jaki jest sens tej odpowiedzi - chyba że zapomnisz, jak „przeliterowałeś” nazwę pliku. Na przykład, jeśli utworzysz plik o nazwie Fooi późniejszym typie cat f(Tab), to się nie powiedzie. Ale to samo dzieje się, gdy piszesz cat foo, cat Foobarlub cat Fu- fakt, że będziesz miał problemy z dostępem do pliku, którego nazwy nie pamiętasz poprawnie, tak naprawdę nie ma nic wspólnego z autouzupełnianiem.
G-Man mówi „Przywróć Monikę”
@ G-Man Touché. Mimo to używanie nazw małych liter oznacza, że ​​masz o jednej rzeczy mniej do zapamiętania.
Blacklight Shining
3

Ponieważ NL_Derek otworzył tę puszkę robaków, ale nie sformułował jej poprawnie, powiem tak:

Można używać wielkich liter, ale należy unikać tworzenia plików (w tym samym katalogu), które różnią się tylko wielkością liter , np. File_Name.txt I file_name.txt , ponieważ

  • Jeśli w jakiś sposób udostępnisz katalog systemowi Windows, nie będzie on mógł uzyskać dostępu do obu plików. Prawdopodobnie będzie mógł uzyskać dostęp tylko do tego, który pojawia się jako pierwszy w katalogu, bez względu na to, jakiej nazwy użyjesz. (Z wyjątkiem: może dać ci do nich dostęp jako FILENA~1.TXTi FILENA~2.TXT - wpisz, dir /xaby zobaczyć, jaka krótka nazwa (jeśli istnieje) pasuje do jakiej długiej nazwy.)
  • Jeśli system plików jest w rzeczywistości systemem plików Windows (np. Zamontowanym z systemu plików exFAT lub NTFS z serwera NFS z systemem Windows), obie nazwy (prawdopodobnie) nie będą mogły współistnieć. Na przykład, jeśli robisz i może skończyć się z jednego pliku, zawierającego dane wyjściowe .cmd1 > foocmd2 > Foocmd2
  • Podobnie, jeśli kiedykolwiek przeniesiesz pliki do systemu Windows, te dwie nazwy (prawdopodobnie) nie będą mogły współistnieć. Na przykład, jeśli utworzyłeś archiwum (np. Zip) zawierające dwa pliki i rozpakowałeś je w systemie Windows, drugi plik prawdopodobnie nadpisze pierwszy. To samo, jeśli przeniosłeś je do skrzynki systemu Windows za pomocą FTP lub czegoś podobnego.
G-Man mówi „Przywróć Monikę”
źródło
Nie tylko Windows, ale kilka innych systemów operacyjnych (VMS, myślę, CP / M na pewno, inne ...)
Toby Speight
3

Oprócz przyczyn technicznych mam do tego praktyczny aspekt. Trzymanie się małych liter sprawi, że wyszukiwanie będzie łatwiejsze, chyba że zbytnio lubisz używać grep -i lub lokalizować -i. Czasami nawet camelCase może być mylące, jeśli trzeba użyć ciągu słów podobnych do liter, jak w storageNYCDCPrimary. Dlatego uważam, że najlepiej jest trzymać się małych liter i posypać je podkreślnikami lub myślnikami, aby zapewnić ich czytelność, na przykład storage_nyc_dc_primary.

Hopping Bunny
źródło
snake_case jest przyjemny dla oczu - storageNycDcPrimaryi StorageNycDcPrimaryoba są dziwne do czytania.
go2null
1

Uważam, że najlepszą praktyką jest unikanie używania wielkich liter i spacji w nazwach plików.

Niektórzy powiedzą, że się nie zgadzają, ale jest to kwestia lub to, co nazywam przekonaniami religijnymi : trudno dyskutować i zgadzać się. Ci, którzy się z tym nie zgadzają, twierdzą, że większość narzędzi jest teraz dostosowana do wielkości liter i przestrzeni: mają rację, ale nie o to chodzi.

Właściwe pytanie brzmi: ile trzeba używać wielkich liter i spacji w nazwach plików. Na to pytanie, z wyjątkiem sytuacji, gdy programuję w Javie, odpowiedź brzmi: cały czas: nie potrzebuję wielkich liter i spacji w nazwach plików . Wszystkie spacje zastępuję znakiem podkreślenia ( _) lub znakiem minus ( -) i dlatego nie używam wielbłąda (inaczej camelCase) w przeciwieństwie do niektórych innych religii.

Wiele osób nazywało mnie gównem za robienie i nauczanie, że - niektórzy nadal tak robią - niektórzy potknęli się o narzędzie, które nie było przyjazne dla kapitału / przestrzeni i przyszli do mnie, mówiąc, że mam rację i że powinni byli mnie wysłuchać. Rób co chcesz , a jeśli użyjesz wielkich liter i spacji w nazwie pliku, mam nadzieję, że nigdy nie potkniesz się na źle napisanym narzędziu. Jednak jeśli skorzystasz z takiego narzędzia, mam nadzieję, że nie będzie to trudne do naprawienia i nie będzie kosztować twojej firmy i / lub dużo pieniędzy i / lub czasu. Ale jeśli skończy się to złymi konsekwencjami, pamiętasz, że niektórzy mówili ci w przeszłości, że używanie wielkich liter i spacji w nazwach plików jest złą praktyką.

I ostatnia rzecz, jeśli chcesz uniknąć wszystkich problemów , żadnych znaków specjalnych w nazwach plików (tylko małe litery, cyfry, podkreślenia i minusy [1]). Ta lista niechcianych znaków obejmuje również wszystkie znaki nie ascii (tak, Francuzi i inni nieanglojęzyczni - i jestem jednym z nich - żaden z nich: à, â, ä, ç, é, ..., ö, æ, œ , ...). Dotyczy to również wielu innych rzeczy, w tym loginu i hasła . Pozwolę ci zgadnąć, co się stanie, gdy umieścisz cytat lub podwójny cytat ( 'lub ") w loginie lub haśle, które są obsługiwane przez skrypt bash niepisany przez potwierdzonego sysadmina ...

[1]: moglibyśmy przedłużyć że do ~, @, #i kilka innych, ale to szuka kłopotów (i tak, wiem o plikach emacsowych ...).

jfg956
źródło
1
Ostatnią rzeczą jest coś, czym powinien zająć się system uwierzytelniający, a nie użytkownik wymyślający hasło. Jeśli system ogranicza zestaw dozwolonych znaków w hasłach, jest to zły system.
Blacklight Shining
Ograniczanie znaków w haśle jest przedmiotem dyskusji: li1, oO0, ... w zależności od lubiących, trudnych do komunikowania się. Niektórzy twierdzą, że hasło nie powinno być przekazywane, ale klucz WiFi to rodzaj hasła, które przekazuję moim znajomym, gdy są u mnie ...
jfg956,
To świadomy wybór z twojej strony, aby uniknąć używania niektórych znaków, a nie ograniczeń wbudowanych w system (w tym przykładzie standardy Wi-Fi, implementacje AP i klienta itp.). Jeśli używasz ciągu losowo wybranych znaków jako hasła, możesz poprawić czytelność, używając (lub zachęcając odbiorców do użycia) czcionki o stałej szerokości lub po prostu używając bardziej charakterystycznych glifów, jeśli piszesz je odręcznie (małe litery z ciągłą literą L, wielka litera I i cyfra 1; mniejsza mała litera O, zaokrąglona wielka litera O, cyfra przerywana lub przerywana 0; itp.). Alternatywnie możesz użyć hasła.
Blacklight Shining