Tìm tất cả các liên kết tượng trưng và cứng đến một tệp trên UNIX


9

Nếu tôi có một tệp cụ thể trong hệ thống tệp UNIX, có cách nào để sử dụng bash để tìm tất cả các liên kết đến tệp đó, cả tượng trưng và khó không? Nếu tôi cần các lệnh khác nhau cho mỗi, chúng là gì?

Câu trả lời:


8

Hãy thử điều này với GNU find:

find /start/dir -L -samefile /file/to/check -exec ls -li {} \;

Ví dụ đầu ra:

1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1

Bạn có thể sử dụng -lsthay vì -execnhưng nó sẽ hiển thị inode và thông tin khác của tệp đích thay vì các tệp riêng lẻ.


Đầu ra này đang hiển thị liên kết cứng và sym? Liên kết Sym được chỉ định bởi -> mũi tên?
aaaidan

@aaaidan: Vâng, đúng rồi. Số inode của x1 và x2 giống nhau cho biết chúng là các liên kết cứng. Mũi tên chỉ ra một liên kết tượng trưng. Sử dụng -L-samefilekhiến cả hai được liệt kê. Nếu bạn bỏ qua -Lthì các liên kết tượng trưng không được theo dõi (xem man find).
Tạm dừng cho đến khi có thông báo mới.

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.