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ì?
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:
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 -ls
thay vì -exec
như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ẻ.
-L
và -samefile
khiến cả hai được liệt kê. Nếu bạn bỏ qua -L
thì các liên kết tượng trưng không được theo dõi (xem man find
).
Nếu bạn không có GNU Find, bạn có thể làm điều này:
find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"
Nhưng nó sẽ không hoạt động cho các liên kết tượng trưng.