Bom estilo / práticas para separadores nos nomes de arquivo (ou diretório) [fechado]

16

Não sei exatamente se essa é uma pergunta "correta" para postar aqui. Provavelmente estou perguntando mais sobre "opiniões" do que respostas categóricas reais (daquelas que funcionam ou não, e é isso).

Eu queria saber qual separador de nomes seria o mais amigável para Linux (ou mais especificamente, amigável para Bash ) e amigável para humanos ao mesmo tempo.

Digamos que eu queira criar um diretório que contenha algo relacionado ao Sr. Foo Bar ( Foo sendo o primeiro nome, Bar sendo o sobrenome)

Ter o nome " Foo-Bar/" é muito conveniente. -é um personagem "regular", não precisa ser escapado, mostra claramente isso Fooe Barsão duas coisas separadas ... Legal.

Agora, " Foo.Bar" é um pouco mais complicado. Alguém pode pensar que Foo.Barna verdade é um arquivo (à primeira vista, especialmente se você não tiver terminais com cores ativadas), onde " Foo" é o nome do arquivo e " Bar" a extensão.

Eu também poderia usar " Foo Bar", mas preciso escapar do espaço em branco quando quiser acessar o diretório e, se desejar listar o conteúdo do diretório pai (onde Foo Barestá localizado) e colocar a lista em um array bash, o espaço em branco vai causar problemas (muito). Não é legal.

Os colchetes ()também causam muitos problemas. Eles também precisam ser escapados e causar problemas com comandos como scp... Nada legal.

Então ... a pergunta (finalmente) é: se você precisa deixar claro e significativo o nome de um arquivo à primeira vista e usar separadores, o que você usa?

BorrajaX
fonte
5
Para referência: o conjunto de caracteres POSIX Portable Filename .
Jw013
Costumo usar traços, mas isso depende do que estou fazendo. Alguns podem considerar o caso de camelo como apropriado, como o FooBar.
Klapaucius

Respostas:

14

Resposta curta: "Foo _-_ Bar"

Resposta longa:

Para facilitar a localização, eu costumo usar uma sequência de caracteres em áreas onde isso é necessário, a idéia é usar algo fácil de detectar, para que você entenda que esse é o separador, talvez algo como "_-_" ou " ___ ".

Um exemplo prático de onde eu uso essa é a minha coleção de mp3, onde os nomes de arquivos contêm o artista e o título da música, e às vezes o número da sequência. E se você usar uma sequência mágica para separá-las, é fácil tanto para os olhos quanto para os scripts. O exemplo mp3 pode ser algo parecido com isto.

  • 01_Blue_Man_Group _-_ Above.mp3
  • 02_Blue_Man_Group _-_ Time_to_Start.mp3
  • 03_Blue_Man_Group _-_ Sing_Along.mp3

Agora, isso pode ser traduzido em seu exemplo, se Foo e Bar são duas coisas lógicas que não devem ser misturadas e que poderiam ser Foo _-_ Bar.

Johan
fonte
2
E dessa forma, você também pode distinguir nomes que já contêm traços (ou separadores em geral).
Lynxlynxlynx
11
Também é muito bom reg ex parse! : ^ (. +) _-_ (. +) \. mp3 $
DanDan
Dado que os humanos visualizariam esses arquivos, esta é uma boa resposta; Em essência, eu consideraria isso uma string separadora; Um separador exclusivo de vários caracteres. No Vagrant, eu notei que ele usa a string VAGRANTSLASHnos nomes de arquivos onde está a separação.
ThorSummoner
9

Com tantos caracteres que você pode achar que não deve ser especial, na verdade, eu uso apenas os caracteres especiais. Isso também me coloca nos bons hábitos de usar a conclusão do bash, onde ele escapará automaticamente de todos os caracteres especiais em um nome de arquivo. Mas também me coloca nos bons hábitos de escapar / citar TUDO em scripts e 1-liners de várias partes no bash.

Por exemplo, em apenas uma linha simples:

for file in *.txt; do something.sh "$file"; done

Dessa forma, mesmo que um dos arquivos tenha um espaço, ou algum outro caractere, a doparte do loop ainda atuará nele, e não perderá 2 ou mais partes de nomes de arquivos, possivelmente causando efeitos colaterais indesejados.

Como não consigo controlar a nomeação de espaço / não espaço de TODOS os arquivos que encontrar, e se eu tentasse, provavelmente quebraria alguns links simbólicos em algum lugar, causando consequências ainda não intencionais, só espero que todo o nome de arquivo / directoryname possa ter espaços, e apenas cite / escape todas as variáveis ​​para compensar.

Então, apenas uso os caracteres que quero (geralmente espaços) nos nomes de arquivos.

Eu até uso espaços nos nomes de conjuntos de dados do ZFS, o que tenho que admitir que causou uma quantidade considerável de preocupação entre os desenvolvedores que escrevem o software para o NAS que eu uso.

Resumo: os espaços não são um caractere inválido ; portanto, não há motivo para não usá-los.

killermist
fonte
6

Uso traços -pelos motivos mencionados acima. Evito sublinhados porque eles exigem o uso da tecla Shift. Portanto, levem pelo menos o dobro do tempo para digitar (também acho feios)

Estou mais inclinado a fazer isso pelos nomes de arquivos de script do que qualquer outra coisa - acho que é mais importante para mim identificar claramente para que serve um script. Os arquivos de documentos são apenas dados inertes, mas os scripts são potencialmente perigosos se forem mal utilizados.

cas
fonte
5

Eu uso sublinhados ( _). Visualmente eles desaparecem e são fáceis de digitar e não especiais.

bahamat
fonte
4
me encontrá-los mais feio do que -, e mais difícil de tipo (se tem que usar a tecla shift)
tshepang