Перейти в каталог целевого файла символической ссылки

Перейти в каталог целевого файла символической ссылки

Как создать команду (или псевдоним) для перехода в каталог, содержащий целевой файл симлинка. Например, если у меня есть симлинк

symFile@ -> /Users/zhermes/some/dir/someFile

Я бы хотел иметь возможность бегать <command> symFileи иметь это cdдля себя/Users/zhermes/some/dir/

решение1

Следующая функция проверяет, существует ли символическая ссылка и cds в ее родительский каталог. Конечно, она также работает с обычными файлами. Она могла бы быть более умной с ошибками от readlinkили cd, но это только начало.

GNU/Linux:

В GNU/Linux вы можете использовать readlink -f:

cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink -f "$1")")" || echo "No such file: $1" }

BSD/OS X:

Следующее должно работать на Unix / OS X, где нет -fопции readlink. Конечно, это означает, что он не будет следовать по вложенным символическим ссылкам.

cdln() { [[ -f $1 ]] && cd "$(dirname "$(readlink "$1")")" || echo "No such file: $1" }

На OS X вы можете установить coreutilsс помощьюДомашнее пивои используйте greadlink -fвместо этого.

Связанный контент