É correto usar certos caracteres especiais ao nomear nomes de arquivos no Linux?

18

É correto usar determinados caracteres especiais, como + , & , ' , . (ponto) e , (vírgula), basicamente, em nomes de arquivos.

Eu entendo que você pode usar - e _ sem nenhum problema, mas fazendo algumas pesquisas eu não consegui encontrar algo definido sobre os outros símbolos; alguns dizem que você pode, alguns dizem que você não pode, e outros dizem que "não é encorajado" a usá-los (o que quer que isso signifique).

    
por Chris Klein 16.09.2014 / 04:32

4 respostas

28

Is it correct to use certain special characters, as +, &, ', . (dot) and , (comma), basically, in filenames.

Sim.

Correto, mas não necessariamente aconselhável ou conveniente.

Você pode usar qualquer caractere, exceto nulo e / dentro de um nome de arquivo nos sistemas de arquivos Unix e Linux modernos.

Você pode usar pontuação ASCII . Alguns utilitários usam stops ( dot ) e vírgulas nos nomes dos arquivos que eles criam.

Você pode usar caracteres de controle ASCII , no entanto, isso é desaconselhável, pois é improvável que sejam exibidos de forma aceitável e sejam difíceis de usar.

Você pode usar metacaracteres de shell , como ASCII e e apóstrofo ASCII. No entanto, isso é inconveniente e exige que, ao construir comandos, você tome um cuidado especial para citar ou escapar desses caracteres.

Você pode usar caracteres de vários bytes usando várias codificações. Cabe ao shell e / ou utilitários interpretar corretamente e exibir caracteres não-ASCII. É aconselhável restringir-se a uma codificação popular como UTF-8 e definir o local apropriado.

Você terá menor número de problemas usando caracteres imprimíveis ASCII, limitando o conjunto de caracteres de pontuação àqueles que não são meta-caracteres do shell e não iniciando um nome com um hífen (ou uma parada - a menos que você quer esconder o arquivo).

    
por 16.09.2014 / 11:27
23

Como os outros afirmaram, em sistemas Unix / Linux modernos, os nomes dos arquivos podem conter qualquer caractere, exceto / (NUL) e pathchk (barra).

Além disso, o padrão POSIX define um conjunto de caracteres portátil para nomes de arquivos:

3.278 Portable Filename Character Set

The set of characters from which portable filenames are constructed.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

The last three characters are the <period>, <underscore>, and <hyphen> characters, respectively. See also Pathname.

O utilitário -p de GNU Coreutils verifica isso quando chamado com a opção -P , e a opção pathchk avisará sobre nomes de arquivos vazios (que não são válidos, mas pode ser passado como um argumento para - ) e nomes de arquivos começando com um hífen ( %code% ).

    
por 16.09.2014 / 14:24
9

A aposta mais segura é consultar a entrada da Wikipedia para o conjunto de caracteres permitido para qualquer sistema operacional. Pode ser encontrado em aqui .

Por exemplo, para a maioria dos sistemas baseados em unix, o conjunto de caracteres permitido é de 8 bits e o caractere reservado é o caractere nulo (NUL, '-ramesh.txt' ). No entanto, não é uma boa prática usar os caracteres especiais nos nomes de arquivos, pois eles representam um problema ao removê-los.

Por exemplo, posso ter um nome de arquivo como %code% e tentar removê-lo como abaixo.

rm -ramesh.txt
rm: invalid option -- 'a'
Try 'rm ./-ramesh.txt' to remove the file '-ramesh.txt'.
Try 'rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try 'rm ./-ramesh.txt' to remove the file '-ramesh.txt'.
Try 'rm --help' for more information.

Eu preciso excluir o arquivo como

rm -- "-ramesh.txt"
rm: remove regular empty file '-ramesh.txt'? y

Mais detalhes podem ser encontrados em esta resposta também .

In Linux and OS-X only / of the printable ASCII set is prohibited I believe. Some characters (shell metacharacters like *?!) will cause problems in command lines and will require the filename to be appropriately quoted or escaped.

Linux filesystems such as ext2, ext3 are character-set agnostic (I think they just treat it more or less as a byte stream - only nulls and / are prohibited). This means you can store filenames in UTF-8 encoding. I believe it is up to the shell or other application to know what encoding to use to properly convert the filename for display or processing.

Então, para concluir, o problema não está em usar os caracteres especiais para nomes de arquivos, mas em como lidar com eles.

    
por 16.09.2014 / 04:58
4

Sua pesquisa está quase certa. É possível usar caracteres especiais em nomes de arquivos, mas não é recomendável, pois esses caracteres têm um significado especial. Convenções de nomenclatura de arquivos no Linux descreve outras restrições sobre nomes de arquivos, bem como "Nomes de arquivos nunca devem começar com um hífen".

Simple exemplo de executar operações de linha de comando com caracteres especiais em nomes de arquivos.

Como uma observação pessoal, prefiro evitar caracteres especiais em nomes de arquivos, porque eles exigem atenção especial quando esses arquivos são usados para qualquer processamento. Assim, removendo a preocupação de lidar com caracteres especiais do processo de desenvolvimento.

    
por 16.09.2014 / 04:57