Caracteres melhor evitados em nomes de arquivos quando usados no Bash, por exemplo '?

1
  1. Por exemplo:

    $ ls -l
    total 344
    -r-------- 1 t t 145657 Mar 11 01:53 joeltest-slides.pdf
    -rw-rw-r-- 1 t t 166814 Mar 11 01:55 The Joel Test: 12 Steps to Better Code? by Joel Spolsky.pdf
    drwx-w--w- 2 t t   4096 Sep 19  2012 The Joel Test 12 Steps to Better Code_files
    -rw--w--w- 1 t t  31940 Feb 12  2011 The Joel Test 12 Steps to Better Code.html
    $ mv The\ Joel\ Test\:\ 12\ Steps\ to\ Better\ Code{                                                                                                                 
    \ by\ Joel\ Spolsky.pdf,.pdf}
    mv: missing destination file operand after ‘The Joel Test: 12 Steps to Better Code{’
    Try 'mv --help' for more information.
    

    O que significa missing destination file operand ? É porque ? no nome do arquivo?

  2. No Bash, na medida em que executa operações de arquivo por builtin ou externo comandos está em causa, quais são os melhores caracteres evitados ao nomear arquivos? Por exemplo,

    O exemplo acima indica que ? é um deles?

    O meu post anterior implica que o novo caractere de linha é um deles?

    O meu anterior posts implica que o espaço em branco é um deles?

  3. É correto que, do ponto de vista do Linux, não haja restrição de caracteres que podem ser usados em nomes de arquivos? Nem do ponto de vista do tipo de sistema de arquivos (ext4)?

por Tim 11.03.2016 / 08:09

1 resposta

1

A regra absoluta é que você não pode usar uma barra / ou um byte nulo em um nome de arquivo. A barra é o separador de diretório e não pode ser escapado. Bytes nulos indicam o final do nome e não podem ser escapados. Além disso, qualquer caractere é permitido no Linux (exceto ao acessar recursos de mídia ou de rede compartilhados com outros sistemas de arquivos), mas vários caracteres podem causar problemas. Eu acho que todos os * BSD modernos também permitem qualquer caractere diferente de / e bytes nulos, mas alguns dos mais antigos tiveram mais restrições.

Se você quiser que um nome de arquivo funcione no shell comum sem aspas, é necessário evitar !"#$&'()*;<=>?[\]^'{|}~ e espaço em branco (espaço, tabulação, nova linha). ~ está ok se estiver no final. No bash especificamente, ^ está ok, # e ~ estão ok em todos os lugares, exceto no início, e = está ok, exceto como um nome de comando (porque seria interpretado como uma atribuição).

Além disso, aqui estão alguns conselhos de portabilidade de nomes de arquivos, em uma ordem de importância aproximada.

  • Não inicie um nome de arquivo com - (traço / hífen). Comandos podem interpretá-lo como uma opção.
  • Não use um ~ (til) inicial porque isso significa "diretório inicial" em muitos aplicativos.
  • Em geral, não inicie nem termine com um sinal de pontuação, pois vários aplicativos atribuem significados especiais a eles (por exemplo, |foo significa "canalizar o programa foo " em vez de "gravar no arquivo%"|foo "e, da mesma forma, com foo| para saída).
  • Se você pretende trocar arquivos com usuários do Windows ou colocar arquivos em mídia removível, não use caracteres que o Windows não suporte: \/?:*"><|
  • Não use caracteres não imprimíveis (por exemplo, caracteres de controle), guias ou novas linhas. Você nem poderá digitá-los em muitas interfaces.
  • Alguns scripts de shell mal escritos podem sufocam nos espaços, bem como \*?[] porque eles são curingas . Além disso, alguns aplicativos que podem atuar em vários arquivos interpretam esses caracteres como curingas.
  • Se você pretende trocar arquivos com computadores mais antigos ou com pessoas que falam um idioma diferente, especialmente um escrito em um alfabeto não latino, eles podem usar uma codificação de caracteres diferente. Os caracteres ASCII têm a garantia de estarem disponíveis em qualquer lugar e codificados da mesma forma.
  • Muitos aplicativos usam a extensão de arquivo , para descobrir quais arquivos eles suportam e como eles são abertos. O sistema também usa a extensão para determinar com qual aplicativo abrir o arquivo. Então deixe as extensões no lugar. A extensão é a parte depois do último ponto, por ex. txt em myfile.txt ; às vezes há várias extensões, por exemplo myfile.txt.gz para um arquivo de texto compactado ( .gz ) ( .txt ).
  • Os nomes de arquivo que começam com . são ocultos por padrão na saída do ls comando e em muitos navegadores de arquivos.
  • O Unix faz distinção entre maiúsculas e minúsculas: myfile não está relacionado a Myfile . Tradicionalmente, os nomes dos arquivos estão em letras minúsculas, principalmente porque isso facilita a digitação. Antigamente, os sistemas geralmente classificavam letras maiúsculas antes das letras minúsculas, portanto há uma tradição de iniciar um nome de arquivo com uma letra maiúscula para torná-lo em primeiro lugar nas listagens de diretórios, mas os sistemas modernos geralmente classificam nomes insensitivos. Manter as letras minúsculas evita confusão e é mais fácil de digitar.

Se você preferir não lembrar de todos esses casos complexos, aqui estão apenas duas regras simples:

  • Segurança máxima: utilize as letras a - z e dígitos 0 - 9 , mais - para separar palavras e .extension no final do nome do arquivo. Por exemplo: my-file.txt
  • Mais legível: use letras e dígitos em inglês ou em seu próprio script, mais espaço ou - para separar palavras e .extension no final do nome do arquivo. Por exemplo: Jörgs Datei.txt

Dica final: use o formato AAAAMMDD (ano-mês-dia, com 4 dígitos para o ano e um zero inicial no número do mês e do dia) para datas, por exemplo, %código%. Dessa forma, classificar o nome do arquivo fornece uma ordem cronológica.

    
por 12.03.2016 / 03:02