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.txt
Vs. file_name.txt
)? Czy to tylko kwestia osobistych preferencji?
28
Odpowiedzi:
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.Powiedziałbym, że tak. Większość DE zdają się stworzyć mnóstwo aktywowanych katalogów w
$HOME
(Downloads
,Desktop
,Documents
- wD
jest bardzo popularne), więc nie ma nic o tym dziwaczne. Istnieją również bardzo powszechne tradycyjne pliki z wielkimi literami, takie jak.Xclients
i.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 .
źródło
README
S iMakefile
S i tak dalej.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
Makefile
zwykle jest nazywany za pomocą dużej literyM
- jest to jeden z plików, który chcesz zobaczyć jako pierwszy, bez przewijania / pomijania w dół korytaa-l
.To powiedziawszy, możesz zrobić znacznie gorzej, jeśli chodzi o nazwy plików:
-
może powodować problemy, ponieważ wiele programów zobaczy ją jako opcję wiersza polecenia zamiast nazwy pliku (np.rm -r
nie usunie pliku o nazwie-r
)..
spowoduje ukrycie go przed wieloma narzędziami i globowanie powłoki (np.rm *
nie usunie plików takich jak.config
)|<>*?
a nawet znaków niedrukowalnych,newline
jest 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.źródło
rm *
nie usunie takich plików.config
?Makefile
iREADME
są 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ćanOctagon
przedangle
, ale przynajmniej byliby razem w zestawieniu.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.html
znajdzie siępage_2.html
w Windows, ale nie powiedzie się w Uniksie.źródło
NUL
i/
zabronionymi.cat > Foo
nadpisze plikfoo
. 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 *.\0
i/
, z rozróżnianiem wielkości liter). Przynajmniej tak to pamiętam. Ale zgadzam się, że to trochę bałagan. Istnieją dalsze ograniczenia w…Jednym z powodów, dla których należy unikać
bash
wielkich 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ębash
przy domyślnej konfiguracji. Jasne, istnieją inne popularne powłoki, ale w połączeniu z faktem, żebash
jest 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.źródło
echo set completion-ignore-case On >> ~/.inputrc
może trochę pomóc, przynajmniej we własnym systemie.Foo
i późniejszym typiecat f
(Tab), to się nie powiedzie. Ale to samo dzieje się, gdy piszeszcat foo
,cat Foobar
lubcat 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.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
Ifile_name.txt
, ponieważFILENA~1.TXT
iFILENA~2.TXT
- wpisz,dir /x
aby zobaczyć, jaka krótka nazwa (jeśli istnieje) pasuje do jakiej długiej nazwy.)cmd1 > foo
cmd2 > Foo
cmd2
źródło
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.
źródło
storageNycDcPrimary
iStorageNycDcPrimary
oba są dziwne do czytania.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 ...).źródło