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?
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?
Odpowiedzi:
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 D
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 .
README
S i Makefile
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 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:
-
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.rm *
nie usunie takich plików .config
?
Makefile
i README
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
przed angle
, 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.
NUL
i /
zabronionymi.
cat > Foo
nadpisze 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 *.
\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, że bash
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.
echo set completion-ignore-case On >> ~/.inputrc
może trochę pomóc, przynajmniej we własnym systemie.
Foo
i późniejszym typie cat f
(Tab), to się nie powiedzie. Ale to samo dzieje się, gdy piszesz cat foo
, cat Foobar
lub 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.
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ż
FILENA~1.TXT
i FILENA~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
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.
storageNycDcPrimary
i StorageNycDcPrimary
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 ...).