2009-11-27 16 views
14

Làm cách nào để có danh sách tất cả các tệp được liên kết trên hệ thống của tôi hoặc từ một thư mục nhất định. Tôi đã từng tạo liên kết nhưng chúng không thể quản lý được theo thời gian. Tôi muốn danh sách tất cả các liên kết như vậy từ một thư mục. Có ai giúp được không?Làm cách nào để tìm tất cả các tệp liên kết mềm hoặc cứng của các thư mục hoặc tệp khác trên linux?

+1

Tôi nghĩ rằng điều này thuộc về serverfault –

+0

Serverfault là gì? – DKSRathore

+0

thử ở đây: serverfault.com –

Trả lời

27

Tìm symlink là dễ dàng:

% find . -type l 

Tìm liên kết cứng là khó khăn, bởi vì nếu một thư mục con của thư mục trong câu hỏi cũng có thư mục con thì những tăng tính liên kết cứng. Đó là cách các thư mục con được liên kết với cha mẹ của chúng trong UNIX (đó là mục nhập .. trong mỗi thư mục con).

Nếu bạn chỉ muốn tìm thấy liên kết file (và không phải thư mục), điều này sẽ làm việc:

% find . -type f \! -links 1 

này hoạt động vì một tập tin mà không có liên kết cứng sẽ có một liên kết count> 1 , và tập tin bỏ liên kết có số lượng liên kết == 1, do đó lệnh này sẽ tìm kiếm tất cả các file có số liên kết <> 1

Ngoài ra, trên các phiên bản mới hơn của find bạn có thể sử dụng:

% find . -type f -links +1 

Điều này có cùng lý do như trên; tuy nhiên, các phiên bản tìm kiếm mới hơn có thể mất + n hoặc -n thay vì chỉ một số. Điều này tương đương với thử nghiệm lớn hơn n hoặc nhỏ hơn n, tương ứng.

+0

Wao, đây là một lệnh nhỏ như vậy. Cảm ơn Alnitak – DKSRathore

+0

Er ... một tệp có <1 liên kết không? Ý tôi là, nó sẽ không làm cho nó trở thành một inode vô định? – naught101

+0

@ naught101, cung cấp -1 thực sự sẽ không tìm thấy bất kỳ tệp nào. – Alnitak

2

@OP, Nếu bạn có GNU tìm thấy, bạn có thể tìm các liên kết cứng bằng cách sử dụng -printf "%n", ví dụ:

find /path -type f -printf "%f/%n/%i\n" | while IFS="/" read filename num_hlinks inum 
do 
echo "Filename: $filename. Number of hard links: $num_hlinks, inode: $inum" 
# if 2 or more files have the same inode number, then they are hard links. 
# you can therefore count how many $inum that are the same and determine those hard links, which 
# you have to try doing yourself. 
done 
3
find/-xdev -samefile filename 
1

Xem ví dụ tại đây https://www.gnu.org/software/findutils/manual/html_node/find_html/Hard-Links.html hoặc kết hợp Alnitak và amber_linux trả lời vào find -L /where/to/search -samefile /some/link/to/file để tìm tất cả các liên kết cứng và mềm tới một tệp nhất định.

+0

Cảm ơn rất nhiều! Đây chính xác là những gì tôi đang tìm kiếm - làm thế nào để tìm ra những tập tin nào khác trên thực tế là tập tin giống với tập tin tôi đang xem. – cb2

Các vấn đề liên quan