Atualmente, eu uso um YYMMDD-NAME+PAGE
nome para a maioria dos meus arquivos. NAME
possui espaços convertidos em sublinhados.
Gostaria de usar o YYYY-MM-DD
formato da data, mas não sei como separá-lo do nome. A -
pareceria estranho se o nome começasse com um número. Se eu usar a _
, ele entrará em conflito com o sublinhado que representa um espaço.
Quais caracteres são razoavelmente seguros nos nomes de arquivos que funcionariam aqui? Estou no Linux, mas posso compartilhar arquivos com outras pessoas (Windows 7, Mac OS X).
Respostas:
Resumo:
\/:*?"<>|
/
Em todas as plataformas, é melhor evitar caracteres não imprimíveis, como os caracteres de controle ASCII.
janelas
No Windows, o Windows Explorer não permite caracteres de controle ou
\/:*?"<>|
você pode usar espaços. Se você usa espaços, geralmente precisará citar o nome do arquivo quando usado na linha de comando (mas os aplicativos GUI não são afetados até onde eu sei). O sistema de arquivos do Windows, como o NTFS, aparentemente armazena a codificação com o nome do arquivo, mas o UTF-16 é padrão.Algumas partes do Windows diferenciam maiúsculas de minúsculas, outras não diferenciam maiúsculas de minúsculas. É fácil criar nomes de arquivos distintos como "Ab" e "ab" em um sistema de arquivos Windows NTFS. Esses nomes se referem a arquivos separados que contêm conteúdo separado distinto. No entanto, embora o prompt de comando do Windows liste com satisfação os dois arquivos
dir
, não é possível acessar ou manipular facilmente um deles usando comandos comotype
. Ver abaixo.Linux, OS-X
No Linux e OS-X, apenas
/
o conjunto ASCII imprimível é proibido, acredito. Alguns caracteres (como metacaracteres do shell*?!
) causarão problemas nas linhas de comando e exigirão que o nome do arquivo seja citado ou escapado adequadamente.Os sistemas de arquivos Linux, como ext2, ext3, são agnósticos no conjunto de caracteres (acho que eles o tratam mais ou menos como um fluxo de bytes - apenas nulos e
/
são proibidos). Isso significa que você pode armazenar nomes de arquivos na codificação UTF-8. Acredito que cabe ao shell ou outro aplicativo saber qual codificação usar para converter corretamente o nome do arquivo para exibição ou processamento.Conclusão
Então você provavelmente poderia usar com segurança algo como
✣
(se não fosse tão difícil digitar)Sensibilidade a maiúsculas e minúsculas no Windows
Observe que não podemos digitar o conteúdo do segundo arquivo; o
type
comando do Windows apenas retorna o conteúdo de Ab. O terceiro arquivo também seria distinto do aB no Linux.(Windows 10 NTFS).
fonte
Embora a resposta da RedGrittyBrick seja tecnicamente correta, a segurança não é o único problema: a usabilidade também é importante. Eu acho que uma pergunta melhor é "quais caracteres são bons para usar em um nome de arquivo".
Algumas diretrizes em potencial:
\/:*?"<>|
e o byte nulo são problemáticos em pelo menos um sistema e devem sempre ser evitados.[]()^ #%&!@:+={}'~
e [ `] todos têm significados especiais em muitas conchas, e são irritantes para trabalhar ao redor, e por isso deve ser evitado. Eles também tendem a parecer horríveis nos URLs .Isso basicamente deixa você com:
[0-9a-zA-Z -._]
que são sempre seguros e não são irritantes de usar (desde que você inicie o nome do arquivo com um alfanumérico) :)
fonte
[]
) fazem parte de expressões regulares e também têm um significado especial no shell. Mas eles não são tão ruins de se trabalhar, exceto em alguns casos extremos.()
, na verdade.[]()^;
, então eu acho que a resposta certa pode realmente ser[0-9a-zA-Z.,_-]
vírgula também pode ser excluída apenas porque é estranho ver em um nome de arquivo, embora eu não possa pensar em um caso real em que isso poderia causar problemasecho whereami > a,b,c
na janela do prompt de comando do Win10.Você poderia:
#
(símbolo do revisor por espaço)Alt-1. caps iniciais podem substituir espaços:
YYMMDD-HHMM-FileName.ext
ouYYMMDD-HHMM_FileName.ext
Caracteres mínimos para uma exibição nítida, que classifica automaticamente com zeros acolchoados para janeiro-setembro (1º e 9º de agosto).
fonte