Qual é a importância de / no seguinte comando do Linux

4

Qual é a diferença entre

cd abc/xyz/

e

cd abc/xyz

Qual é a importância de / no final? Qual é o caminho certo para usá-lo? Porque ambos parecem funcionar corretamente.

    
por sat 18.01.2010 / 08:23

4 respostas

9

A diferença pode ser pequena no exemplo de cd que você forneceu, mas tenha cuidado quando você tiver arquivos mv .

Por exemplo, se você quiser mover vários arquivos para outro diretório e digitar

for i in *.mp3 ; do mv $i dest ;  done

Esquecendo-se da barra, então cada dos arquivos movidos sobrescreverá um arquivo chamado dest (o primeiro criará um arquivo chamado dest se já não existe). O resultado é que todos os arquivos, exceto o último, são sobrescritos com o último arquivo e agora são chamados dest .

Para mover para um diretório, você deve especificar o trailing /

for i in *.mp3 ; do mv $i dest/ ;  done

Um dos efeitos colaterais da barra é que, se o diretório não existir, você receberá uma mensagem de erro.

    
por 18.01.2010 / 08:43
2
cd abc/xyz/

é a maneira correta de fazer isso. Mas se você especificar

cd abc/xyz

e se cd descobre que xyz é um diretório, ele assume a presença de /

    
por 18.01.2010 / 08:25
2
cd abc/xyz

Está correto, já que "abc / xyz" refere-se a ' a entidade "xyz" no diretório "abc" '. Quando você digita

cd abc/xyz/

refere-se a ' A entidade "" no diretório "xyz" no diretório "abc" '. A entidade "" (string vazia) é automaticamente traduzida para ".", Que é o diretório "atual", que neste caso é o diretório "xyz". Então tudo funciona para a mesma coisa.

(Algumas pessoas acham que os diretórios " devem " têm uma barra anexada. Eles estão enganados.)

    
por 18.01.2010 / 09:51
1

Eles são idênticos. A string é tratada pelos operadores filename como um "caminho", que é uma abstração, e cada caminho é associado a um nome de base e outro caminho, o nome da pasta. Dois caminhos são idênticos se cada um deles for o mesmo string. Por exemplo:

cas var$ dirname abc/xyz; basename abc/xyz
abc
xyz
cas var$ dirname abc/xyz/; basename abc/xyz/
abc
xyz

Observe que, enquanto alguns programas tratam cadeias de caracteres de forma idêntica, incluindo todos os utilitários usuais do UNIX, se eles forem os mesmos caminhos, há outros que se importam com barras finais. O mais importante deles é rsync .

Postscript A partir das especificações POSIX, Resolução do nome do caminho :

A pathname that contains at least one non-slash character and that ends with one or more trailing slashes shall be resolved as if a single dot character ( '.' ) were appended to the pathname.

    
por 18.01.2010 / 11:19

Tags