Cách tìm tất cả các liên kết tượng trưng chỉ đến bất kỳ tệp / thư mục nào trong một thư mục đã cho


14

Đối với câu hỏi này hoặc câu hỏi này (ví dụ), bạn sẽ nhận được giải pháp về cách tìm kiếm các liên kết tượng trưng chỉ đến một thư mục nhất định (hãy gọi nó /dir1), trong khi tôi quan tâm đến các liên kết tượng trưng có thể trỏ đến bất kỳ tệp / thư mục nào bên trong /dir1.

Tôi muốn xóa thư mục đó nhưng tôi không chắc chắn rằng tôi an toàn để làm như vậy, vì trên một thư mục khác (hãy gọi nó /dir2), tôi có thể có các liên kết tượng trưng chỉ đến các phần bên trong của /dir1.

Hơn nữa, tôi có thể đã tạo các liên kết tượng trưng này bằng các đường dẫn tuyệt đối hoặc tương đối. Trợ giúp duy nhất của tôi là tôi biết các liên kết tượng trưng mà tôi muốn kiểm tra nằm trên một hệ thống tập tin được gắn kết, trên /dir2.

Câu trả lời:


15

Bạn có thể tìm thấy tất cả các liên kết tượng trưng bằng cách sử dụng:

find / -type l 

bạn có thể muốn chạy cái này với quyền root để đến mọi nơi trên đĩa.

Bạn có thể mở rộng những thứ này bằng cách sử dụng readlink -fđường dẫn đầy đủ của liên kết và bạn sẽ có thể grepxuất ra thư mục đích mà bạn đang xem xét để xóa:

find / -type l -exec readlink -f {} + | grep -F /dir2

Việc sử dụng find / -type l -printf '%l\n'không hoạt động khi bạn nhận được các liên kết tương đối giống như ../tmp/xyzcó thể trỏ đến thư mục tiêu của bạn, nhưng không phù hợp vì chúng không được mở rộng hoàn toàn.


1
Trong trường hợp cây con có thể hữu ích để theo các liên kết tượng trưng:find -L /subtree -xtype l -exec readlink -f {} +
ruvim

3

Trong trường hợp của tôi, câu trả lời được chấp nhận là không hữu ích (vì nó không xuất ra nguồn liên kết). Đây là những gì làm việc cho tôi.

Tôi đã làm việc xung quanh nó bằng hai -execmệnh đề:

find /home/ -type l -exec readlink -nf {} ';' -exec echo " -> {}" ';' | grep "/dir2"

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.