Quais são os motivos técnicos para não usar caracteres de espaço nos nomes de arquivo?

75

Alguém que eu conheço expressou irritação hoje em relação àqueles que tendem a não usar espaços em nossos nomes de arquivos, por exemplo NamingThingsLikeThis.txt- apesar da maioria dos sistemas operacionais modernos que suportam espaços em nomes de arquivos.

Existem razões técnicas para que ainda seja comum ver nomes de arquivos sem espaços (apropriados)? Em caso afirmativo, quais são esses motivos técnicos para evitar ou desencorajar espaços nos nomes de arquivos e em que circunstâncias eles são relevantes?

O motivo mais óbvio em que pude pensar e o motivo pelo qual geralmente o evito são as cotações extras necessárias na linha de comando ao lidar com esses arquivos. Existem outras razões técnicas significativas?

Chris W. Rea
fonte
Como você disse, eles são muito mais fáceis de lidar na linha de comando. E para a programação, não tenho certeza se é possível ou viável usar espaços nos nomes de arquivos.
Alvin Row

Respostas:

66

Caracteres de espaço em branco nos nomes de arquivos podem ser um problema real no proverbial em muitos contextos na linha de comando e em scripts, nos quais você deve ter cuidado para garantir que eles sejam escapados adequadamente, para que não pareçam separadores dos comandos que você é corrida.

É mais seguro não tê-los lá, mesmo se você tiver certeza de que o arquivo / dir / o que quer que seja, nunca será usado nesse contexto.

Isso e velhos hábitos são difíceis de morrer.

David Spillett
fonte
Eles também são uma dor real para lidar, então você precisa compor caminhos e modificá-los. Certifique-se de que os componentes estejam sem aspas e sem escape para modificação antes de refazer / refazer as aspas, especialmente se partes forem enviadas para outros bits de código a serem manipulados.
afrazier 16/03/11
2
Se você acha que os espaços são ruins, tente lidar com arquivos com novas linhas ( '\n') em seus nomes. (Sistemas Unix-like realmente permitir que este, o Windows geralmente, ou pelo menos faz com que seja difícil.)
Keith Thompson
31

Além das outras respostas sobre linha de comando e hábitos antigos, também existem muitos protocolos de rede que requerem cuidados especiais ao lidar com nomes de arquivos contendo espaços.

(Se você já tentou baixar "Product List.pdf" de um site e acabou com um arquivo chamado "Product", foi mordido por isso, porque o programador do outro lado da linha não sabia ou não podia descubra as regras de citação para o cabeçalho http Content-Disposition.)

Stobor
fonte
11
+1. HTTP para começar. Os espaços nos URLs (para qualquer protocolo, não apenas HTTP) devem ser escapados para% 20 ou +. Confusão pode surgir quando eles não são codificados como deveriam. Para páginas da Web, existe uma razão visual para evitar os espaços e o sublinhado ("_") comumente usados ​​para substituí-los - eles podem ter a mesma aparência em um link sublinhado; portanto, alguém que copia o link manualmente ou lê para alguém pode obter errado.
David Spillett
5
Uma das coisas mais irritantes em espaços que precisam ser codificados em URLs é a tendência para um determinado software para acabar mantendo os espaços codificado ...
Samb
Isto é real? Em 2018 isso acontece?
Chris Calo
@ChrisCalo Você pode perceber que essa resposta foi dada em 2009, não em 2018. Mas sim, isso ainda acontece em 2018. Possivelmente com menos frequência, agora que a maioria dos desenvolvedores novatos usa estruturas para criar sites, em vez de fazer tudo do zero, mas ainda é um problema.
precisa saber é o seguinte
28

Muitas das razões são históricas. Isso não significa que eles não fazem sentido hoje.

Problemas de portabilidade

Ao nomear um arquivo, você também deve considerar como outros sistemas (arquivos) tratam esse nome. Um caractere em um nome de arquivo pode ser bom para o seu sistema, mas pode ser um problema para outro sistema.

Portanto, contanto que houvesse a menor possibilidade de você poder acessar o arquivo facilmente de um sistema antigo, você escolheria apenas caracteres seguros . Isso pode incluir a inicialização em um sistema de recuperação antigo que você mantinha por aí ou o medo de que as versões recentes do Windows ainda sejam baseadas no MS-DOS.

comprimento

Um sistema de arquivos pode limitar o tamanho que um arquivo pode ter. Isso foi ainda mais sério nos dias em que o MS-DOS estava limitado a nomes de arquivos 8.3 . Portanto, deixar de fora os espaços permitiu inserir caracteres mais significativos no nome.

Vários outros sistemas de arquivos também definiram limites estritos no tamanho do nome do arquivo. A Wikipedia possui uma tabela no artigo sobre comparação de sistemas de arquivos para aqueles que desejam os detalhes.

Caracteres reservados

O MS-DOS também definiu o caractere de espaço como um caractere reservado. Isso se deve ao fato de que o caractere de espaço foi usado para preenchimento no FAT . Além disso, o MS-DOS não forneceu um sistema de escape no shell.

Interpretação da linha de comando

A maioria das linhas de comando que conheço usa o caractere de espaço como um delimitador de parâmetro . Ao negligenciar o escape adequado de um nome de arquivo, isso pode ter consequências terríveis, pois partes do nome do arquivo podem ser interpretadas como parâmetros para o aplicativo que você deseja chamar.

Considere a diferença entre

rm foo bar

e

rm "foo bar"

O artigo da WikiPedia vinculado acima ainda aponta a ambiguidade introduzida pela falta para escapar adequadamente de um comando:

A ambiguidade pode ser evitada proibindo-se espaços incorporados nos nomes de arquivos e diretórios (por exemplo, substituindo-os por sublinhados '_') ou, se suportado pelo interpretador de linha de comando e pelos programas que utilizam esses parâmetros como argumentos, colocando um nome com espaços incorporados entre caracteres de aspas ou usando um caractere de escape antes do espaço, geralmente uma barra invertida ('\'). Por exemplo

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

é ambíguo ("nome do programa" faz parte do nome do programa ou dois parâmetros?); Contudo

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

e Long \ path / Long \ program \ name Parâmetro \ um Parâmetro \ dois ...

não são ambíguos.

Localizadores uniformes de recursos (URL)

Ao tentar descrever o local de um arquivo, usando uma URL, os espaços precisam ser escapados.

Os caracteres podem não ser seguros por vários motivos. O caractere de espaço é inseguro, pois espaços significativos podem desaparecer e espaços insignificantes podem ser introduzidos quando URLs são transcritas ou digitadas ou submetidas ao tratamento de programas de processamento de texto.

Fonte: RFC1738

Assim, um espaço deve ser substituído por um %20. Isso torna o nome do arquivo parte da URL menos legível e, portanto, faz com que as pessoas o evitem em primeiro lugar.

Der Hochstapler
fonte
25

Os espaços são codificados ou convertidos %20em nomes de arquivos na Web, o que pode dificultar o gerenciamento dos ativos de um site.

Tendo Image 1.pnge Image%201.pngé confuso. É mais fácil de usar Image001.png.

Isso realmente se enquadra na mesma categoria que seqüências de escape para a linha de comando.

user7012
fonte
5

Às vezes, os espaços podem apresentar um problema ao lidar com a linha de comando, ou ao usar sistemas operacionais mais antigos, ou ao escrever programas que serão compilados em sistemas operacionais diferentes, ou quando ... existem muitas razões que podem apresentar problemas, e eu não ' realmente sinto que é um problema escrever o arquivo como: file-without-blanks.txt ou file_without_blanks.txt . Prefiro o dask porque o sublinhado às vezes pode se tornar invisível ao lidar com, por exemplo, fonte sublinhada.

Mas, principalmente, é uma questão de hábito desde a velhice. O que acho que não há razões profissionais suficientes para abandonar.


Uma nota adicional, possivelmente não relacionada, mas mesmo assim eu a colocarei aqui. As pessoas que nomeiam seus arquivos com espaços geralmente não pensam muito nisso; aqueles que nem sempre sabem um pouco do porquê é bom evitá-los nos nomes de arquivos.
E, todos podemos concordar, não há nada pior do que um arquivo com o nome "Prezado senhor ou senhora, estou escrevendo esta carta para informá-lo de yo.doc".

Não apenas espaços - o tamanho do arquivo também conta para algo, e IMHO, não deve ser maior que, digamos, 30 caracteres. Para nomes de arquivos longos, com espaços internos também são uma bênção ao gravar CD, DVD e outros que precisam ser lidos em sistemas operacionais mais antigos e entre as plataformas Win e * nix.

Torre
fonte
2
Usuários do Lazy Word ...
SamB