tìm cách sử dụng với -L


34

Tôi có

link -> file

tôi làm

find -L . -name 'link'

Và lấy

./link

Tại sao vậy?

người đàn ông tìm thấy nói:

-L: Theo liên kết tượng trưng. Khi tìm kiểm tra hoặc in thông tin về các tệp, thông tin được sử dụng sẽ được lấy từ các thuộc tính của tệp mà điểm liên kết, chứ không phải từ chính liên kết (trừ khi đó là liên kết tượng trưng của bro hoặc không thể kiểm tra tệp mà các điểm liên kết).

Câu trả lời:


12

Với -L, nó kiểm tra các thuộc tính của tệp - nội dung hoặc siêu dữ liệu, không phải thuộc tính của liên kết. Ví dụ: nếu bạn sử dụng -atime, nó sẽ kiểm tra atimetệp chứ không phải liên kết:

$ find testdir/ -name link -newer testdir/ref
testdir/link
$ find -L testdir/ -name link -newer testdir/ref
$

testdir/linkđã được tạo sau đó testdir/ref, nhưng tệp mà nó trỏ đến thì không.


1
Bạn có thể giải thích lấy ví dụ của tôi? Điều tôi hiểu là đây: Trong ví dụ của tôi, bắt đầu tìm kiếm. Nó gặp ./link, vì -L có hiệu lực nên nó hủy đăng ký và lấy các thuộc tính của ./file. Nó so sánh tên của ./file với mẫu 'link' và vì nó không khớp, nên không báo cáo bất kỳ o / p nào. Có gì sai với lý luận của tôi?
Ankur Agarwal

Từ hướng dẫn tìm kiếm mà bạn đã trích dẫn, "thông tin được sử dụng sẽ được lấy từ các thuộc tính của tệp mà điểm liên kết." Tên của một tệp không phải là một trong các thuộc tính của nó, vì vậy nó vẫn sử dụng tên của liên kết. Đó cũng là một công cụ hữu ích hơn nhiều so với tên của tệp thực.
Kevin

"Tên của tệp không phải là một trong những thuộc tính của nó" Tôi không biết điều đó. Bất kỳ thuộc tính nào khác của các tệp không được coi là thuộc tính? Thành thật mà nói tôi vẫn còn hoài nghi và sẽ chờ đợi những gì người khác nói.
Ankur Agarwal

Giống như @abc, không biết rằng tên tệp không phải là thuộc tính tệp. Tôi có thể tìm thấy mẩu thông tin này ở đâu trong bất kỳ tài liệu và / hoặc trang man nào? Vui lòng tham khảo nơi tôi có thể tìm hiểu thêm về thuộc tính tệp.
đùa

34

Nguyên tắc chung là nếu một lệnh hoạt động trên các liên kết (tức là các mục trong thư mục, là các con trỏ tới các nút) thì lệnh sẽ tự xử lý các liên kết tượng trưng chứ không phải là đối tượng mà liên kết trỏ tới. Mặt khác, lệnh hoạt động trên những gì symlink trỏ đến. Do đó, cptheo các liên kết tượng trưng theo mặc định và sao chép nội dung của tệp được trỏ đến bởi liên kết. Nhưng khi bạn yêu cầu cpxử lý các mục trong thư mục bằng cách chỉ định -R, nó sẽ dừng theo các liên kết tượng trưng. mvluôn luôn làm việc với các mục thư mục, và vì vậy nó không bao giờ theo các liên kết tượng trưng.

Các findhoạt động bình thường của lệnh là để hoạt động trên các directory-entry, vì vậy liên kết tượng trưng không được tuân thủ theo mặc định. Thêm các -Lnguyên nhân findđể theo liên kết tượng trưng cho tất cả các thuộc tính ngoại trừ một thuộc tính không thể bỏ qua khi thực hiện tìm kiếm thư mục, tên. Một trong những mục đích của find -namelà cung cấp đầu vào cho các lệnh như mvrm, hoạt động trên các mục nhập thư mục. Sẽ có kết quả khó chịu và đáng ngạc nhiên nếu find -L dir -namecó thể tạo ra các tên được chỉ ra bên ngoài cây thư mục bắt nguồn từ dir.


Ôi! Tại sao khái niệm tinh tế này không được minh họa tốt trên các trang người đàn ông (trừ khi tôi bỏ lỡ nó)? Đây là một bất ngờ lớn đối với tôi.
Ankur Agarwal

2
@Kyle Jones There would be unpleasant and surprising results if tìm -L dir -name` có thể tạo ra các tên được chỉ ra bên ngoài cây thư mục bắt nguồn từ dir.` => không nên như vậy: sẽ có khó chịu ... nếu find dir -name pattern...? bởi vì thêm -L cho phép trỏ đến thư mục bên ngoài
timotheecour

Vậy làm thế nào để có được cp -Rsao chép nội dung dưới một liên kết tượng trưng?
javadba
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.