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


9

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

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

infelizmente não há nenhuma solução alternativa que eu conheça, por isso seria bom se você pudesse ajudar!


4
Você quer dizer cd /path/to? Isso vai mudar o diretório para o diretório que o arquivo file.endestá em.
Alaa Ali

11
Não, o arquivo é variável, e eu gostaria de entrar no caminho do arquivo (solte-o no terminal) e, em seguida, vá para a pasta que está em
Azsgy

Respostas:


10

Digite cd $( dirname /path/to/file.end). Isso vai levar você para dentro /path/to.

Explicação:

  • dirnameretorna o caminho completo para um arquivo (sem o nome do arquivo que você escolheria basename) - ou seja, dirname /etc/apt/apt.conf.d/99update-notifierretorna/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 comocd /etc/apt/apt.conf.d

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

cd `dirname /path/to/file.end` 

8

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

function fcd () { [ -f "$1" ] && { cd "$(dirname "$1")"; } || { cd "$1"; } ; pwd; }

Eu entendi direito ?: function fcd () {[-f $ 1] && {cd $ (/ file.end $ 1); } || {cd $ 1; } pwd} a resposta é: bash: erro de sintaxe próximo ao token inesperado `pwd ', isso me dá um erro da seguinte maneira :(
Azsgy

2
@ Atsch, precisa de um ponto pwde vírgula antes e, se você estiver definindo uma função em uma linha, precisará de um ponto e vírgula depois pwd.
Glenn Jackman

@glennjackman a função apenas sai sem qualquer saída ou mudança de dir :(
Azsgy

execute a função e digite echo $?- qual é o status de saída?
Glenn Jackman

caramba, eu não deveria ter duvidado de mim mesmo. A alternativa parecia melhor para mim quando eu achei _O-
Rinzwind

1

Se você anexar "/ .." ao nome do arquivo que o levará ao diretório correto, por exemplo cd /path/to/file.end/... De qualquer maneira, funciona no Cygwin.


4
Não funciona no bash;) touch test && cd /home/test/test/..diz:bash: cd: /home/test/test/..: No such file or directory
Rinzwind
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.