Czy złą praktyką jest, aby nazwa folderu zawierała kropkę (.)? Co powiesz na nazwę pliku z wieloma kropkami?

28

Czasami sensowne jest, aby nazwa folderu zawierała kropkę (.). Na przykład przechowujesz dane dla eksperymentu przeprowadzonego przy L = 0,5. Tak więc folder może mieć nazwę:

experiment_L0.5

Podobny problem może wystąpić w przypadku nazw plików. Na przykład:

file_L0.5.txt

Czy praca w Ubuntu jest złą praktyką? Co powiesz na udostępnianie tych katalogów użytkownikowi Windows?

Dzięki!

Hamid
źródło
5
Jeśli kropka jest pierwszym znakiem, folder zostanie ukryty. Poza tym nie sądzę, żeby to miało znaczenie.
user3121023,

Odpowiedzi:

37

O ile mi wiadomo, nie ma problemów z nazywaniem folderów i plików za pomocą jednej lub wielu kropek.

Ubuntu zasadniczo nie używa kropki i trzech znaków (takich jak .txt) do identyfikacji typu pliku. Nie ma to więc specjalnego znaczenia w kontekście Ubuntu. Jest to przydatne podczas udostępniania plików w systemie Windows. Ubuntu używa Magic Numbers w pierwszych kilku bajtach pliku do identyfikacji typu pliku. Jednak Nautilus. ignoruje magiczne liczby, jeśli dostępne jest rozszerzenie kropki i trzech znaków w celu identyfikacji typu pliku. To ustawienie można zmienić. Zobacz Wymuś nautilusa, aby ignorować rozszerzenia

W Ubuntu rozpoczęcie nazwy pliku lub folderu kropką, na przykład .experiment_L0.5, powoduje ukrycie pliku lub folderu. Możesz przełączać wyświetlanie ukrytych plików, naciskając Ctrl+ Hw Nautilusie. W systemie Windows nazwa pliku rozpoczynająca się od. nie jest ukryty Więc jeśli przeniesiesz ukryty plik o nazwie .experiment_L0.5do systemu Windows, będzie on wyraźnie widoczny.

W Ubuntu nazwa pliku może kończyć się kropką, ponieważ nie ma specjalnego znaczenia na końcu. Jednak w systemie Windows kropka oddziela nazwę pliku i rozszerzenie, a nazwa pliku kończąca się kropką, ale rozszerzenie nie jest dozwolone. Kiedy próbowałem utworzyć taki plik w systemie Windows, dostałem plik z samą nazwą, bez kropki, bez rozszerzenia.

Odniesienia: Wiki na temat nazw plików

Mam nadzieję że to pomoże.

użytkownik68186
źródło
4
To jest poprawne. Jeśli dzielisz pliki z systemem Windows, musisz unikać :znaku dwukropka , niedozwolonego w nazwach plików systemu Windows, co spowoduje problemy ( i tak się dzieje ). Zobacz także tutaj .
Rmano
Dzięki @Rmano. W odpowiedzi dodałem link do wiki.
user68186,
1
Mówiąc o kompatybilności, myślę, że kropka końcowa (jak fname.) nie jest dozwolona w systemie Windows.
Rmano
Jeszcze raz dziękuję @Rmano. Przeprowadziłem kilka szybkich testów i nie udało mi się utworzyć pliku o nazwie test.w systemie Windows. Zaktualizuję swoją odpowiedź.
user68186,
1
Aby dodać do komentarza Rmano - może to stanowić problem w Ubuntu, jeśli masz dysk Windows podłączony za pośrednictwem VirtualBox. Próba wykonania mkdir nazwy z kropką końcową kończy się niepowodzeniem z błędem „Błąd protokołu”.
pokonał
11

Krótka odpowiedź

  • System Windows nie zezwala na następujące znaki: <>:"/\|?*( źródło )
  • Więcej odradzanych znaków to: spacja i kropka .( źródło )
    • Narzędzia wiersza poleceń są trudniejsze w użyciu, gdy masz spacje w nazwach (trudniejsze, nie niemożliwe)
    • Kropki są używane w RegEx (np. Gdy chcesz użyć grep). Wiodąca kropka powoduje, że w systemie Linux plik jest ukryty zgodnie z konwencją. W systemie Windows kropki są używane w rozszerzeniu pliku, które służy do wykrywania typu pliku.
  • Okna też nie pozwoli nazwy plików CON, PRN, AUX, CLOCK$, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, i LPT9. ( źródło )
  • Jedyne znaki niedozwolone w systemach plików Unix, które znam, to /null (bajt null, \0).
  • Zobacz także: Ograniczenia systemu plików (nie wiem, z którym systemem Windows chcesz być kompatybilny).

Długa odpowiedź

Tło techniczne: system plików

Ubuntu korzysta z ext4systemu plików. System plików śledzi, gdzie pliki są przechowywane w pamięci podstawowej (dysk, dysk SSD lub cokolwiek innego), uprawnienia w postaci właściciela / grupy / innego mogą odczytać / zapisać / wykonać, znaczniki czasu, nazwę.

System plików strukturyzuje dostępną pamięć. Pierwszy blok nazywa się „superblokiem”. Ten blok służy do montowania systemu plików. O ile mi wiadomo, każdy nowoczesny system plików dzieli przestrzeń na bloki. Myślę (i nie jestem tego pewien), że większość systemów plików ma również stały rozmiar bloku, chociaż rozmiar bloku można skonfigurować podczas tworzenia systemu plików. ext4 (a także ext2 i ext3) wykorzystują tak zwane „i-węzły” dla plików i katalogów. Te i-węzły zawierają wskaźniki do innych bloków (które mogą być również i-węzłami lub „blokami danych”). I „pierwszy” i-węzeł pliku zawiera wszystkie informacje, o których wspomniałem powyżej.

Inną informacją jest „typ” pliku. „Typ” może być:

  • zwykły plik
  • informator
  • plik urządzenia (urządzenie blokowe lub znakowe)
  • ...

W rzeczywistości możesz także otwierać katalogi za pomocą edytora:

vim /home

Ponieważ katalog nie zawiera pełnej ścieżki, a jedynie nazwy zawartości, nie widzę powodu, dla którego pliki nie mogą zawierać /. Myślę, że to może być wygoda. (Czy ktoś wie, dlaczego /nie jest dozwolony?)

W przypadku innych systemów plików sytuacja wygląda jednak inaczej. FAT16 i FAT32 używały tak zwanej „tabeli alokacji plików”. Oznacza to, że istnieje tabela, która zawiera wszystkie pliki zapisane w pliku, w którym „klastrze” zaczynają i w którym klastrze kończą jako pojedynczo połączona lista.

Ważną rzeczą, którą chciałem powiedzieć, jest to, że niedozwolone znaki mogą również zależeć od systemu plików.

Tło techniczne: Typy plików

  • System Windows używa rozszerzeń plików do wykrywania typów plików
  • Linux używa „Magic Bytes” do wykrywania typów plików. Magic Bytes są częścią zawartości pliku i dlatego są całkowicie niezależne od nazwy. Te bajty są częścią specyfikacji typu pliku (patrz specyfikacja png jako przykład). Używa także rozszerzeń nazw plików z tymi samymi bajtami magicznymi, takimi jak .txtlub .html(oba są plikami tekstowymi).

Związane z

Martin Thoma
źródło
Zgadywanie, w jaki sposób FAT przechowuje nazwy plików, nie jest całkiem poprawne: en.wikipedia.org/wiki/FAT32#File_Allocation_Table - rzeczywisty „FAT” przechowuje listę klastrów , podczas gdy katalogi przechowują listę nazw plików ze wskaźnikiem do pierwszego klastra plik podobny do tego, jak opisujesz ext4. :) Ponadto, .txta .htmlpliki rzeczywiście mają różne „magiczne wartości” - spróbuj zmienić nazwę pliku HTML na test.txti uruchomić file test.txt. Nie ma to większego związku z pierwotnym pytaniem, ale nadal :)
Sergey
1
Dzięki, usunąłem niewłaściwą część dotyczącą FAT. o magicznych wartościach i file: filenie tylko używa magicznych wartości do określenia typu pliku. Każdy prawidłowy plik HTML jest plikiem tekstowym (w tym sensie, że zawiera czytelne znaki), ale nie każdy prawidłowy plik tekstowy jest prawidłowym plikiem HTML (w tym sensie, że sprawdza poprawność względem walidatorów W3C). Tak więc całkiem sporo typów plików (html, xml, csv, js, php, c, h, cpp, ...) to w rzeczywistości pliki tekstowe. Tylko pliki binarne mają bajty magiczne, które znajdują się w ściśle określonych pozycjach. Wszystkie wyżej wymienione pliki mogą mieć dowolną spację przed treścią.
Martin Thoma,
5

Ze względu na kompletność nazwy składające się tylko z jednej kropki .lub dwóch kropek ..są wyjątkowe:

  • . odnosi się do bieżącego katalogu
  • .. odnosi się do katalogu nadrzędnego

Te wpisy są dodawane automatycznie i zawsze istnieją, więc nie możesz mieć pliku o nazwie .lub ...

Siergiej
źródło
Słuszna uwaga. Dotyczy to zarówno systemu Windows, jak i Ubuntu.
user68186
1

Nie ma to znaczenia, ani w systemie Linux, ani w systemie Windows.

Powszechną praktyką jest posiadanie folderu o nazwie „program.d” - w celu zapisania konfiguracji i innych rzeczy dla programu (zajrzyj do katalogu / etc)

Ohad Cohen
źródło
0

Nazwy plików są bardzo elastyczne w systemach plików Unix i Linux. Jedyną nazwą pliku, której nie możesz mieć, jest znak null lub /nazwa zawierająca w nazwie jego nazwę. Ale z pewnością dobrą praktyką byłoby unikanie używania znaków, które są zabronione / zastrzeżone w innych systemach z punktu widzenia przenośności nazw; jakbyś nie powinien używać żadnego ze " * : < > ? \ / |znaków (ograniczony przez NTFS) w nazwie pliku, jeśli chcesz uzyskać dostęp do pliku w systemie Windows.

A jeśli chodzi o użycie .(kropki) w nazwie pliku , myślę, że powinno być w porządku, ponieważ nie wydaje się być „zastrzeżoną” postacią w żadnym z systemów (z wyjątkiem OpenVMS, MS-DOS i Windows, w których jest używany w nazwa pliku / katalogu jest dozwolona, ​​ale ostatnie wystąpienie zostanie zinterpretowane jako separator rozszerzeń w VMS, MS-DOS i Windows), jak wspomniano w linku do Wikipedii poniżej:

W innych systemach, zwykle uważanych za część nazwy pliku, może być dozwolony więcej niż jeden kropka. W Uniksie okres wiodący oznacza, że ​​plik lub folder jest zwykle ukryty.

precyzyjny
źródło