Como posso criar um comando (ou alias) para ir ao diretório que contém o arquivo de destino de um link simbólico. Por exemplo, se eu tiver um link simbólico
symFile@ -> /Users/zhermes/some/dir/someFile
Eu gostaria de poder correr <command> symFile
e ter isso cd
para mim/Users/zhermes/some/dir/
Responder1
A função a seguir verifica se o link simbólico existe e cd
está em seu diretório pai. Claro, também funciona com arquivos normais. Poderia ser mais inteligente com erros de readlink
ou cd
, mas é um começo.
GNU/Linux:
No GNU/Linux, você pode usar readlink -f
:
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink -f "$1")")" || echo "No such file: $1" }
BSD/OS X:
O seguinte deve funcionar no Unix/OS X, onde não há -f
opção para readlink
. É claro que isso significa que não seguirá links simbólicos aninhados.
cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink "$1")")" || echo "No such file: $1" }
No OS X, você pode instalar coreutils
comCerveja caseirae use greadlink -f
em seu lugar.