Qual é a diferença entre um nome de diretório que termina com uma barra e outro que não termina? [duplicado]

1

Existe alguma diferença entre um nome de diretório como

mydirectory

e

mydirectory/

Eu notei que isso acontece quando eu executo ls em alguns diretórios - alguns dos nomes de diretórios têm uma barra e outros não. Isso é problemático porque, se eu quiser acessar um arquivo contido em um diretório, talvez seja necessário adicionar uma barra no final:

vi $mydirectory"/"$myfile

ou simplesmente faça

vi $mydirectory$myfile
    
por farid99 15.07.2015 / 21:44

3 respostas

7

Sem / , também pode ser um arquivo.

Em algumas situações, pode ser mortal. Por exemplo, ao usar mv :

mv file1 mydirectory
mv file2 mydirectory
mv file3 mydirectory

Tudo bem? Mas se mydirectory não existia ou não era um diretório, o resultado final é que file1 e file2 desapareceram e file3 agora é nomeado mydirectory .

mv file1 mydirectory/
mv file2 mydirectory/
mv file3 mydirectory/

Se mydirectory não existisse, tudo que você recebe são três mensagens de erro e file1 , file2 e file3 ainda estão lá.

Portanto, o / remove alguma ambiguidade.

Além disso, não existem regras. Alguns programas podem se comportar de maneira diferente dependendo se você forneceu o / no final ou não. Cabe a eles o que fazer com isso.

Em alguns casos, você também terá problemas se usar muitos / . Por exemplo, find mantém excedente / em sua saída, o que pode atrapalhar se você tentar encontrar nomes de arquivos / caminhos usando comparações simples de strings em vez de, digamos, realpath ou algo assim.

    
por 15.07.2015 / 21:52
2

Isso provavelmente seria uma coisa de "exibição" com ls , ou seja, se você usar ls -p ou ls -F , ela deve consistentemente adicionar a barra após os diretórios. Essencialmente, ele adiciona sugestões visuais sobre o que acha do arquivo. (Observe que -F também adicionará, por exemplo, @ a links simbólicos, * a arquivos com permissões executáveis, | a pipes nomeados, = a soquetes e assim por diante). Você também pode reproduzir com ls -d directory/ vs ls -d directory .

/ e vim "$mydirectory/$myfile" , acredito, são os únicos dois caracteres não válidos em um nome de arquivo / diretório.

Sempre adicionar a barra deve ser seguro, se você tiver atribuído mydirectory e myfile corretamente, fazer $mydirectory deve fazer o que você espera. (Com a advertência de $myfile e foo/bar tendo sido atribuídos corretamente). foo//bar e prefix=/home user=" oops" rm -rf $prefix$user devem ser equivalentes.

Geralmente; Eu realmente não gosto de atribuir a saída de ls a variáveis e lidar com isso, principalmente porque eu já fiquei surpreso com os personagens que acabaram em nomes de arquivos combinados com falta de citação, terminando com resultados destrutivos. (Por exemplo, /home , que acabaria excluindo recursivamente ./oops e, em seguida, tentando recursivamente excluir find -print0 | xargs -0 ).

Em vez de usar o ls, tento quando posso confiar na expansão glob pelo bash ou ls . Se você usa ls , certifique-se de não usar um alias existente para %code% e use as opções de exibição adequadas para sua tarefa específica.

    
por 15.07.2015 / 22:37
0

Se você pensar em diretórios ou pastas no contexto de um "nome de arquivo fantasia", a pasta ainda é um arquivo, mas a pasta é um ponteiro para um contêiner como uma pasta de arquivos no seu fichário, se você denotar ou usar um barra "/" ou barra "/" É útil que um script tenha certeza de que você não está se referindo a um arquivo em vez de a uma pasta.

Espero que isso faça sentido.

    
por 15.07.2015 / 21:50