Quali motivi tecnici esistono per non usare caratteri spaziali nei nomi dei file?


75

Qualcuno che conosco ha espresso irritazione oggi nei confronti di quelli di noi che tendono a non usare spazi nei nostri nomi di file, ad esempio NamingThingsLikeThis.txt- nonostante la maggior parte dei sistemi operativi moderni supportino gli spazi nei nomi di file.

Ci sono ragioni tecniche per cui è ancora comune vedere i nomi dei file senza spazi (appropriati)? In tal caso, quali sono questi motivi tecnici per cui gli spazi nei nomi dei file sono evitati o scoraggiati e in quali circostanze sono rilevanti?

Il motivo più ovvio che mi viene in mente, e perché in genere lo evito, sono le virgolette extra richieste nella riga di comando quando si tratta di tali file. Ci sono altri motivi tecnici significativi?


Come hai detto, sono molto più facili da gestire sulla riga di comando. E per la programmazione non sono sicuro che sia persino possibile o fattibile usare spazi nei nomi dei file.
Alvin Row,

Risposte:


66

I caratteri degli spazi nei nomi dei file possono essere una vera sofferenza reale nel proverbiale in molti contesti sulla riga di comando e negli script, in cui devi stare attento a assicurarti che siano correttamente sfuggiti, quindi non sembrare separatori dei comandi che sei in esecuzione.

È più sicuro non averli lì, anche se sei sicuro che il file / dir / what-ever non verrà mai utilizzato in un tale contesto.

Quello e le vecchie abitudini sono dure a morire.


Sono anche un vero dolore reale da affrontare, quindi devi comporre percorsi e modificarli. Accertarsi che i componenti non siano quotati e non siano sottoposti a escape per la modifica prima di rieseguire l'escaping / la nuova quotazione, soprattutto se i pezzi vengono inviati ad altri bit di codice da manipolare.
Afrazier

2
Se ritieni che gli spazi non siano corretti, prova a gestire i file con newline ( '\n') nei loro nomi. (I sistemi simili a Unix lo consentono effettivamente; Windows in generale, o almeno lo rende difficile.)
Keith Thompson,

31

Oltre alle altre risposte sulla riga di comando e le vecchie abitudini, ci sono anche molti protocolli di rete che richiedono particolare attenzione quando si tratta di nomi di file contenenti spazi.

(Se hai mai provato a scaricare "Product List.pdf" da un sito Web e hai finito con un file chiamato "Product", sei stato morso da questo, perché il programmatore dall'altra parte non lo sapeva o non poteva non capire le regole di quotazione per l'intestazione http Content-Disposition.)


11
+1. HTTP per cominciare. Gli spazi negli URL (per qualsiasi protocollo, non solo HTTP) devono essere convertiti in% 20 o +. La confusione può sorgere quando non sono codificati come dovrebbe essere. Per le pagine Web esiste un motivo visivo per evitare entrambi gli spazi e il carattere di sottolineatura ("_") comunemente usato per sostituirli - entrambi possono sembrare uguali in un collegamento sottolineato, quindi qualcuno che copia il collegamento manualmente o lo legge a qualcuno può ottenere sbagliato.
David Spillett,

5
Una delle cose più fastidiose sugli spazi che devono essere codificati negli URL è la tendenza di alcuni software a finire per mantenere gli spazi codificati ...
SamB

È vero? Nel 2018 questo succede?
Chris Calo,

@ChrisCalo Potresti notare che questa risposta è stata data nel 2009, non nel 2018. Ma sì, questo succede ancora nel 2018. Forse meno spesso, ora che la maggior parte degli sviluppatori principianti usa i framework per costruire siti Web piuttosto che fare tutto da zero, ma è comunque un problema.
Stobor

28

Molte delle ragioni sono storiche. Ciò non significa che non abbiano senso oggi.

Problemi di portabilità

Quando si assegna un nome a un file, potrebbe anche essere necessario considerare il modo in cui altri sistemi (file) tratteranno tale nome file. Un carattere con un nome file può andare bene per il tuo sistema, ma potrebbe essere un problema per un altro sistema.

Quindi, fintanto che esiste la minima possibilità che tu possa voler accedere facilmente al file da un sistema precedente, sceglieresti solo un carattere sicuro . Ciò può includere l'avvio in un vecchio sistema di recupero che hai tenuto in giro o il timore che le recenti versioni di Windows siano ancora in qualche modo basate su MS-DOS.

Lunghezza

Un file system può limitare la lunghezza che può avere un file. Ciò era ancora più grave nei giorni in cui MS-DOS era limitato a 8,3 nomi di file . Quindi, tralasciando gli spazi ti ha permesso di inserire nel nome caratteri più significativi.

Numerosi altri file system hanno anche definito limiti rigorosi per la lunghezza dei nomi dei file. Wikipedia ha una tabella nell'articolo sul confronto dei file system per coloro che vogliono i dettagli.

Personaggi riservati

MS-DOS ha inoltre definito il carattere spazio come carattere riservato. Ciò è dovuto al fatto che il carattere spazio è stato utilizzato per il riempimento nel FAT . Inoltre, MS-DOS non prevedeva un sistema di escape nella shell.

Interpretazione da riga di comando

La maggior parte delle righe di comando che conosco usano il carattere spazio come delimitatore di parametri . Quando si trascura di sfuggire correttamente a un nome file, può avere conseguenze disastrose poiché parti del nome file possono essere interpretate come parametri dell'applicazione che si desidera chiamare.

Considera la differenza tra

rm foo bar

e

rm "foo bar"

L'articolo di WikiPedia linkato sopra sottolinea anche l'ambiguità introdotta dalla mancanza per sfuggire correttamente a un comando:

L'ambiguità può essere prevenuta vietando innanzitutto gli spazi incorporati nei nomi di file e directory (ad esempio sostituendoli con caratteri di sottolineatura '_') oppure, se supportati dall'interprete della riga di comando e dai programmi che prendono questi parametri come argomenti, racchiudendo un nome con spazi incorporati tra caratteri di citazione o utilizzando un carattere di escape prima dello spazio, di solito una barra rovesciata ('\'). Per esempio

Long path/Long program name Parameter one Parameter two ...

è ambiguo ("nome programma" fa parte del nome programma o due parametri?); però

Long_path/Long_program_name Parameter_one Parameter_two ...,
LongPath/LongProgramName ParameterOne ParameterTwo ...,
"Long path/Long program name" "Parameter one" "Parameter two" ...

e lungo \ percorso / lungo \ programma \ nome parametro \ un parametro \ due ...

non sono ambigui.

Localizzatori di risorse uniformi (URL)

Quando si tenta di descrivere la posizione di un file, utilizzando un URL, è necessario uscire dagli spazi.

I personaggi possono non essere sicuri per una serie di motivi. Il carattere spaziale non è sicuro perché possono scomparire spazi significativi e possono essere introdotti spazi insignificanti quando gli URL vengono trascritti o composti o sottoposti al trattamento di programmi di elaborazione testi.

Fonte: RFC1738

Pertanto, uno spazio deve essere sostituito con un %20invece. Ciò rende meno leggibile il nome del file dell'URL e, di conseguenza, le persone lo evitano in primo luogo.


25

Gli spazi vengono codificati o convertiti %20in nomi di file sul Web, il che potrebbe rendere più difficile la gestione delle risorse di un sito.

Avere Image 1.pnged Image%201.pngè fonte di confusione. Image001.pngInvece è più facile da usare .

Questo rientra davvero nella stessa categoria delle sequenze di escape per la riga di comando.


5

A volte, gli spazi possono presentare un problema quando si lavora sulla riga di comando, o quando si utilizzano sistemi operativi precedenti, o quando si scrivono programmi che verranno compilati su sistemi operativi diversi o quando ... ci sono molte ragioni che possono presentare problemi, e io non sento davvero che è un tale problema scrivere il file come: file-without-blanks.txt o file_without_blanks.txt . Preferisco il dask perché il carattere di sottolineatura a volte può diventare invisibile quando si tratta, ad esempio, di caratteri sottolineati.

Ma soprattutto, è una questione di abitudine fin dalla vecchiaia. Il che non mi sento ci sono abbastanza pro motivi per abbandonare.


Una nota aggiuntiva, forse non correlata, ma comunque la inserirò qui. Le persone che nominano i loro file con spazi di solito non ci pensano molto; quelli che spesso non sanno un po 'del perché è bene evitarli nei nomi dei file.
E, siamo tutti d'accordo, non c'è niente di peggio di un file che si chiama "Caro signore o signora, ti scrivo questa lettera per informarti di yo.doc".

Non solo spazi: anche la lunghezza del file conta qualcosa e, IMHO, non dovrebbe essere più lunga di, diciamo, di 30 caratteri. Per i nomi di file lunghi con spazi interni è anche una benedizione quando si registrano CD, DVD e simili che devono essere letti sotto sistemi operativi precedenti e tra Win e * nix plaforms.


2
Utenti pigri di parole ...
SamB,
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.