Đi vào một thư mục được liên kết bởi một liên kết


12

Khi tôi cdmột liên kết, đường dẫn hiện tại của tôi có tiền tố với đường dẫn của liên kết, thay vì đường dẫn của thư mục liên kết đến. Ví dụ

~/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$

Tôi muốn thay đổi đường dẫn hiện tại của tôi thành đường dẫn của thư mục được liên kết, để tôi có thể làm việc với các thư mục gốc của thư mục được liên kết. Bên cạnh lsliên kết để tìm ra thư mục được liên kết, và sau đó cdvào nó, một số cách đơn giản hơn để thực hiện điều đó là gì? Ví dụ, sau khi cdvào một liên kết, làm thế nào để bạn thay đổi đường dẫn hiện tại của bạn thành đường dẫn của thư mục được liên kết?

Câu trả lời:


22

Với vỏ POSIX, bạn có thể sử dụng -Ptùy chọn dựng sẵn cd :

cd -P <link>

Với bash, từ man bash:

Tùy chọn -P cho biết sử dụng cấu trúc thư mục vật lý thay vì theo các liên kết tượng trưng (xem thêm tùy chọn -P cho lệnh dựng sẵn)


7
Bạn có thể làm điều này cd -P .sau bản gốc cd.
ctrl-alt-delor

5

Bạn có thể sử dụng readlinkđể xác định vị trí các điểm liên kết của mình và cung cấp đầu ra này làm mục tiêu của bạn cd.

cd "$(readlink <link>)"

Trong trường hợp các liên kết tượng trưng bổ sung trỏ đến liên kết tượng trưng, readlinksẽ chỉ cung cấp mục tiêu, trừ khi bạn chỉ định một trong các tùy chọn của nó để theo liên kết tượng trưng đến mục tiêu tệp chính tắc, chẳng hạn readlink -f <link>.

readlink - giá trị in của một liên kết tượng trưng hoặc tên tệp chính tắc

-f, --canonicalize
canonicalize bằng cách theo từng symlink trong mọi thành phần của tên đã cho theo cách đệ quy; tất cả trừ thành phần cuối cùng phải tồn tại

-e, --canonicalize-
canonicalize bằng cách theo dõi mọi symlink trong mọi thành phần của tên đã cho theo cách đệ quy, tất cả các thành phần phải tồn tại

-m, --canonicalize-thiếu
canonicalize bằng cách theo dõi mọi symlink trong mọi thành phần của tên đã cho theo cách đệ quy, không có yêu cầu về sự tồn tại của các thành phần


5

Các shell giống như Korn theo dõi các liên kết tượng trưng trong đường dẫn đến thư mục hiện tại (điều này được gọi là theo dõi thư mục hiện tại hợp lý). Nếu bạn muốn mở rộng tất cả các liên kết tượng trưng, ​​hãy chuyển tùy chọn -Psang phần cddựng sẵn (để theo dõi thư mục hiện tại vật lý):

cd -P logic

Nếu bạn đang ở trong một thư mục mà bạn đã truy cập thông qua một liên kết tượng trưng và muốn chuyển thư mục hiện tại được theo dõi sang đường dẫn với các liên kết tượng trưng được mở rộng, hãy chạy

cd -P .

Nếu bạn muốn in đường dẫn đến thư mục hiện tại với các liên kết tượng trưng được mở rộng, hãy chạy pwd -P. Trong bash, nếu bạn muốn tắt theo dõi logic, hãy chạy set -P; trong zsh, chạy set -whoặc setopt chase_links.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.