È una cattiva pratica che il nome della cartella contenga un punto (.)? Che ne dici del nome del file con più punti?


28

A volte ha senso pratico che un nome di cartella contenga un punto (.). Ad esempio, stai memorizzando i dati per un esperimento condotto a L = 0,5. Quindi la cartella potrebbe essere denominata:

experiment_L0.5

Un problema simile può sorgere per i nomi di file. Per esempio:

file_L0.5.txt

Lavorare in Ubuntu, è questa cattiva pratica? Che ne dici se condividi queste directory con un utente Windows?

Grazie!


5
Se il punto è il primo carattere, la cartella verrà nascosta. A parte questo, non penso che importi.
user3121023

Risposte:


37

Per quanto ne so non ci sono problemi con la denominazione di cartelle e file con punti singoli o multipli.

Ubuntu generalmente non usa il punto e tre caratteri (come .txt) per identificare il tipo di file. Quindi questo non ha alcun significato speciale nel contesto di Ubuntu. Ciò è utile quando si condividono file con Windows. Ubuntu utilizza Magic Numbers nei primi byte del file per identificare il tipo di file. Tuttavia, Nautilus. ignora i numeri magici se l'estensione di punti e tre caratteri è disponibile per identificare il tipo di file. Questa impostazione può essere modificata. Vedi Force nautilus per ignorare le estensioni

In Ubuntu, l'avvio di un nome di file o cartella con un punto, ad esempio .experiment_L0.5, rende nascosto il file o la cartella. Puoi attivare o disattivare la visualizzazione dei file nascosti premendo Ctrl+ Hin Nautilus. In Windows un nome file che inizia con a. non è nascosto. Quindi, se trasferisci un file nascosto chiamato .experiment_L0.5in un sistema Windows, sarà chiaramente visibile.

In Ubuntu un nome di file può terminare con un punto in quanto non ha alcun significato speciale posto alla fine. Tuttavia, in Windows un punto separa il nome e l'estensione del file e un nome di file che termina con un punto ma nessuna estensione non è consentita. Quando ho provato a creare un file simile in Windows, ho ottenuto un file con solo il nome, nessun punto, nessuna estensione.

Riferimento: Wiki su nomi di file

Spero che sia di aiuto.


4
Questo è corretto. Se condividi file con Windows, devi evitare il :carattere di due punti , illegale nei nomi dei file di Windows, che creerà problemi ( e lo fa ). Vedi anche qui .
Rmano,

Grazie @Rmano. Ho aggiunto un link al wiki nella mia risposta.
user68186

1
A proposito di compatibilità, penso che fname.neanche un punto finale (come ) sia permesso in Windows.
Rmano,

Grazie ancora @Rmano. Ho eseguito alcuni test rapidi e non sono riuscito a creare un file denominato test.in Windows. Aggiornerò la mia risposta.
user68186

1
Per aggiungere al commento di Rmano - questo può essere un problema su Ubuntu se hai un'unità Windows montata tramite VirtualBox. Cercare di mkdir un nome con un punto finale non riesce con "Errore protocollo".
Bvanlew,

11

La breve risposta

  • Windows non consente i seguenti caratteri: <>:"/\|?*( origine )
  • Altri personaggi che sono scoraggiati sono: spazio e punto .( fonte )
    • Gli strumenti da riga di comando sono più difficili da usare quando si hanno spazi nei nomi (più difficile, non impossibile)
    • I punti vengono utilizzati in RegEx (ad es. Quando si desidera utilizzare grep). Un punto iniziale rende un file nascosto per convenzione in Linux. In Windows, i punti vengono utilizzati nell'estensione del file, che viene utilizzato per il rilevamento del tipo di file.
  • Di Windows, inoltre, non consente nomi di file CON, PRN, AUX, CLOCK$, NUL COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9 LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, e LPT9. ( fonte )
  • Gli unici caratteri non ammessi nei file system Unix che conosco sono /e null (il byte null, \0).
  • Vedi anche: Limiti del file system (non so a quale Windows vuoi essere compatibile).

La lunga risposta

Background tecnico: file system

Ubuntu utilizza il ext4file system. Un file system tiene traccia dei file archiviati nella memoria sottostante (disco o SSD o altro), autorizzazioni in forma di proprietario / gruppo / altro in grado di leggere / scrivere / eseguire, timestamp, nome.

Il file system struttura la memoria disponibile. Il primo blocco si chiama "superblock". Questo blocco viene utilizzato per montare un file system. Per quanto ne so, ogni moderno file system divide il suo spazio in blocchi. Penso (e non ne sono troppo sicuro) che la maggior parte dei file system abbia anche una dimensione di blocco fissa, sebbene la dimensione del blocco possa essere configurata quando viene creato il file system. ext4 (e anche ext2 ed ext3) fanno uso dei cosiddetti "inode" per file e directory. Questi inode contengono puntatori ad altri blocchi (che potrebbero anche essere inode o essere "blocchi di dati"). E il "primo" inode di un file contiene tutte le informazioni che ho menzionato sopra.

Un'altra informazione è il "tipo" del file. "Tipo" può essere:

  • file regolare
  • elenco
  • file dispositivo (dispositivo a blocchi o caratteri)
  • ...

In effetti, puoi anche aprire le directory con un editor:

vim /home

Poiché la directory non contiene il percorso completo, ma solo i nomi dei contenuti non vedo un motivo per cui i file non possano contenere a /. Immagino che potrebbe essere convenienza. (Qualcuno sa perché /non è permesso?)

Tuttavia, le cose sono diverse per altri file system. FAT16 e FAT32 utilizzavano una cosiddetta "tabella di allocazione dei file". Ciò significa che esiste una tabella che contiene tutti i file archiviati nel tuo file, da quale "cluster" iniziano e da quale cluster finiscono come un elenco collegato singolarmente.

La cosa importante che volevo dirti è che i caratteri non consentiti potrebbero anche dipendere dal file system.

Background tecnico: tipi di file

  • Windows utilizza le estensioni dei file per rilevare i tipi di file
  • Linux utilizza "Magic Bytes" per rilevare i tipi di file. I byte magici fanno parte del contenuto del file e quindi completamente indipendenti dal nome. Questi byte fanno parte della specifica del tipo di file (vedi la specifica png come esempio). Utilizza anche le estensioni di file per i file con gli stessi byte magici come .txto .html(entrambi sono file di testo).

Relazionato


La tua ipotesi su come FAT memorizza i nomi dei file non è del tutto corretta: en.wikipedia.org/wiki/FAT32#File_Allocation_Table - l'attuale "FAT" memorizza l'elenco dei cluster , mentre le directory memorizzano un elenco di nomi di file con un puntatore al primo cluster di un file, simile a come descrivi ext4. :) Inoltre, .txte .htmlfile hanno davvero diversi "valori magici" - provare a rinominare un file html test.txte l'esecuzione file test.txt. Non ha molta rilevanza rispetto alla domanda originale, ma comunque :)
Sergey

1
Grazie, ho rimosso la parte sbagliata su FAT. sui valori magici e file: filenon usa solo valori magici per determinare il tipo di un file. Ogni file HTML valido è un file di testo (nel senso che contiene caratteri leggibili), ma non tutti i file di testo validi sono un file HTML valido (nel senso che convalida con i validatori W3C). Quindi molti tipi di file (html, xml, csv, js, php, c, h, cpp, ...) sono in realtà file di testo. Solo i file binari hanno byte magici che si trovano in posizioni ben definite. Tutti i file che ho nominato sopra possono avere spazi bianchi arbitrari prima del contenuto.
Martin Thoma,

5

Per completezza, i nomi che consistono solo di un singolo punto .o due punti ..sono speciali:

  • . si riferisce alla directory corrente
  • .. si riferisce alla directory principale

Tali voci vengono aggiunte automaticamente ed esistono sempre, quindi non è possibile avere un file denominato .o ...


Buon punto. Questo vale sia per Windows che per Ubuntu.
user68186

1

Questo non importa, non in Linux né in Windows.

È pratica comune avere una cartella denominata "programma.d" - per salvare la configurazione e le cose per un programma (cerca nella directory / etc)


0

La denominazione dei file è molto flessibile nei file system Unix, Linux. L'unico nome file che non puoi avere è un carattere null o quello che contiene a /nel suo nome. Ma sarebbe sicuramente una buona pratica evitare di usare i caratteri proibiti / riservati in altri sistemi dal punto di vista della portabilità del nome; come se non dovessi usare nessuno dei " * : < > ? \ / |caratteri (limitato da NTFS) nel tuo nome file se vuoi accedere al file in un sistema Windows.

E sull'uso di un .(punto) nel nome file , penso che dovrebbe andare bene in quanto non sembra essere un carattere "riservato" in nessuno dei sistemi (tranne OpenVMS, MS-DOS e Windows in cui il suo utilizzo in il nome del file / della directory è consentito ma l'ultima occorrenza verrà interpretata come separatore dell'estensione in VMS, MS-DOS e Windows) come indicato nel link Wikipedia che segue:

In altri sistemi, di solito considerati parte del nome file e può essere consentito più di un periodo. In Unix, un periodo iniziale indica che il file o la cartella sono normalmente nascosti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.