Indo para o diretório pai de um arquivo com cd?

6

Eu estou escrevendo um .sh para fazer algum trabalho para mim, mas agora estou no ponto em que tenho que fazer o cd para o diretório em que o arquivo /path/to/file.end está. terminal não permite

cd /path/to/file.end
bash: cd: /path/to/file.end: Not a directory

Infelizmente, não há solução que eu conheça, então seria bom se você pudesse ajudar!

    
por Azsgy 05.07.2013 / 11:53

3 respostas

7

Digite cd $( dirname /path/to/file.end) . Isso levará você a /path/to .

Explicação:

  • dirname retorna o caminho completo de um arquivo (sem o nome do arquivo, que você obteria com basename ), ou seja, dirname /etc/apt/apt.conf.d/99update-notifier retorna /etc/apt/apt.conf.d
  • a expressão $(anything) é substituída pelo resultado do comando entre parênteses. Então, cd $( dirname /etc/apt/apt.conf.d/99update-notifier) é executado como cd /etc/apt/apt.conf.d

Outra notação (mas antiga e desencorajada) para o mesmo foi

cd 'dirname /path/to/file.end' 
    
por user1721265 05.07.2013 / 18:08
6

Você não pode cd em um arquivo. Aqui está uma (linha de comando) função que irá automaticamente cd em um caminho para um determinado caminho de arquivo completo:

function fcd () { [ -f "" ] && { cd "$(dirname "")"; } || { cd ""; } ; pwd; }
    
por Rinzwind 05.07.2013 / 12:05
1

Se você acrescentar "/ .." ao nome do arquivo que o levará ao diretório correto, por exemplo, %código%. Funciona no Cygwin de qualquer forma.

    
por brain 05.07.2013 / 15:38