Przechodzenie do katalogu połączonego linkiem

12

Kiedy jestem cdlinkiem, moja bieżąca ścieżka jest poprzedzona ścieżką łącza, a nie ścieżką katalogu, do którego prowadzi łącze. Na przykład

~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic

~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic

~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$

Chciałbym, aby moja bieżąca ścieżka została zmieniona na ścieżkę połączonego katalogu, dzięki czemu mogę również pracować z katalogami nadrzędnymi połączonego katalogu. Poza lslinkiem do znalezienia połączonego katalogu, a następnie cddo niego, jakie są prostsze sposoby na osiągnięcie tego? Na przykład, po cdprzejściu do linku, jak zmienić bieżącą ścieżkę na ścieżkę połączonego katalogu?

Tim
źródło

Odpowiedzi:

22

W powłoce POSIX możesz użyć -Popcji wbudowanego cd :

cd -P <link>

Wraz bashz man bash:

Opcja -P mówi, aby używać fizycznej struktury katalogów zamiast podążać za dowiązaniami symbolicznymi (patrz także opcja -P do wbudowanej komendy set)

Cuonglm
źródło
7
Możesz to zrobić cd -P .po oryginale cd.
ctrl-alt-delor
5

Możesz użyć, readlinkaby określić, gdzie twój link wskazuje i podać ten wynik jako cel twojego cd.

cd "$(readlink <link>)"

W przypadku dodatkowych dowiązań symbolicznych wskazujących na dowiązania symboliczne, readlinkpo prostu zapewni cel, chyba że określisz jedną z jego opcji, na przykład śledzenie dowiązań symbolicznych do kanonicznego celu pliku readlink -f <link>.

readlink - drukuj wartość dowiązania symbolicznego lub kanonicznej nazwy pliku

-f, - kanonizować kanonizować, podążając rekurencyjnie
za każdym dowiązaniem symbolicznym w każdym składniku podanej nazwy; wszystkie oprócz ostatniego komponentu muszą istnieć

-e, --canonicalize-istniejący
canonicalize poprzez rekursywne śledzenie każdego dowiązania symbolicznego w każdym komponencie danej nazwy, wszystkie komponenty muszą istnieć

-m, --canonicalize-missing
canonicalize przez rekursywne śledzenie każdego dowiązania symbolicznego w każdym komponencie podaną nazwą, bez wymagań dotyczących istnienia komponentów

Jon Surrell
źródło
5

Powłoki podobne do Korna śledzą dowiązania symboliczne w ścieżce do bieżącego katalogu (jest to znane jako logiczne śledzenie bieżącego katalogu). Jeśli chcesz rozwinąć wszystkie dowiązania symboliczne, przekaż opcję -Pdo cdwbudowanego polecenia (dla fizycznego śledzenia aktualnego katalogu):

cd -P logic

Jeśli znajdujesz się w katalogu, do którego masz dostęp za pomocą dowiązania symbolicznego i chcesz przełączyć śledzony katalog bieżący na ścieżkę z rozwiniętymi dowiązaniami symbolicznymi, uruchom

cd -P .

Jeśli chcesz wydrukować ścieżkę do bieżącego katalogu z rozwiniętymi dowiązaniami symbolicznymi, uruchom pwd -P. W bash, jeśli chcesz wyłączyć śledzenie logiczne, uruchom set -P; w Zsh, uruchom set -wlub setopt chase_links.

Gilles „SO- przestań być zły”
źródło