Xóa tất cả các liên kết tượng trưng của các tệp trong một lệnh


6

Tôi muốn xóa tất cả các liên kết tượng trưng của các tập tin. Tôi có một cấu trúc thư mục /usr/local/instantclient/11.2.0.3chứa nhiều tệp và tôi có các liên kết tượng trưng của các tệp này trong /usr/local/lib/Bây giờ tôi muốn xóa tất cả các liên kết tượng trưng của các tệp đó. Làm thế nào tôi có thể làm điều này trong một lệnh. Nếu tôi loại bỏ các /usr/local/instantclient/11.2.0.3tập tin thực tế có chứa các tập tin thì nó sẽ để lại các liên kết bị hỏng trong /usr/local/lib.

Câu trả lời:


12

Để xóa các liên kết (từ man findbên dưới -type):

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

Tôi nghĩ rằng điều này nên làm thủ thuật:

find /usr/local/lib/ -maxdepth 1 -follow  -type l

Đầu ra có tạo ra một danh sách các tập tin bạn muốn xóa không? Nếu vậy, khi bạn chắc chắn 100%:

find /usr/local/lib/ -maxdepth 1 -follow  -type l -delete

Điều này sẽ chỉ loại bỏ các liên kết bị hỏng. Để xóa tất cả các liên kết, hãy xóa khổ -followthơ, nhưng tôi sẽ không làm điều đó dưới /usr/local/lib.


1
Chỉ cần làm rõ: điều này giả định rằng thư mục đích đã bị xóa, vì vậy các liên kết đã bị hỏng. Lệnh sẽ liệt kê tất cả các liên kết tượng trưng bị hỏng trong /usr/local/libthư mục (nhưng không lặp lại), vì vậy nếu có các liên kết bị hỏng khác, thì nó sẽ hiển thị nhiều hơn mức cần thiết. Không phải là có nhiều liên kết bị hỏng ở đó để bắt đầu, vì vậy có lẽ nó ổn, nhưng có thể một hệ thống có các liên kết bị hỏng có chủ đích và chúng tôi muốn sử dụng các liên kết đó.
Daniel Andersson

1
Tôi đã thử lệnh được đề xuất bởi Petter. Các -followtùy chọn không hoạt động. Chỉ find /usr/local/lib/ -maxdepth 1 -type l | deletelàm việc. Nhưng tôi nghĩ rằng đây không phải là cách tốt nhất để làm điều đó. Thực tế không có cách nào để liệt kê tất cả các liên kết mềm của một tệp trong khi các liên kết cứng của tệp có thể được liệt kê bằng giá trị inode của tệp. Đây là một cuộc thảo luận về nó stackoverflow.com/questions/4532241/
Kẻ

Làm thế nào để tìm và xóa tất cả các liên kết cứng đến một tệp được thảo luận ở đây linuxcommando.blogspot.in/2008/09/ mẹo nhưng điều này không hoạt động đối với các liên kết sybmolic.
MutantMahesh

Mặc dù có thể không có cách nào (dễ dàng) là "liên kết đọc ngược" một liên kết tượng trưng, ​​tôi không thấy điều đó có liên quan đến vấn đề của bạn như thế nào; Bạn nói rằng các liên kết được tạo ra được đặt ở /usr/local/libđâu? Ngoài ra, bạn không có -followtùy chọn trong phiên bản tìm kiếm của bạn?
Petter H
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.