Thực hiện đệ quy lệnh Linux 'ar'


0

Tôi có một thư mục chứa hàng trăm thư mục con với nhiều tệp .lib trong đó. Tôi có thể sử dụng ar -x filename.liblệnh để giải nén một trong số chúng, nhưng tôi đã tự hỏi làm thế nào một người sẽ làm điều này một cách đệ quy vì không có cờ đệ quy được xây dựng theo man ar. Ngay bây giờ tôi đang cố gắng làm

find . -name '*.lib' -exec ar -x {} +

nhưng tôi nhận được một tin nhắn nói cho mọi tập tin no entry filename.lib in archive. Tôi đã khắc phục lỗi này nhưng tôi không thể tìm thấy bất cứ điều gì có liên quan và phương pháp thực hiện hiện tại của tôi dựa trên câu trả lời của câu hỏi này (cụ thể là câu hỏi thứ 2 và nhận xét của nó), nhưng rõ ràng nó không hoạt động. Bất cứ ý tưởng như những gì tôi đang làm sai?


Meta-note: không có thứ gọi là "câu trả lời thứ 2". Bất kỳ người dùng nào cũng có thể tự đặt câu trả lời bằng cách "bỏ phiếu", "cũ nhất" hoặc "hoạt động"; thay đổi phiếu bầu, hoạt động được cập nhật trên mạng
Kamil Maciorowski

@KamilMaciorowski xấu của tôi, đã sửa câu hỏi và được đề cập đến câu hỏi thứ 2 bằng phiếu bầu, bởi vì câu hỏi đã cũ có lẽ sẽ là câu trả lời thứ hai trong một thời gian.
Alerra

Câu trả lời:


1

man 1 ar nói cú pháp là

ar [--plugin name] [-X32_64] [-]p[mod [relpos] [count]] archive [member...]

Vì vậy, nó hoạt động với một kho lưu trữ tại một thời điểm, các đối số phụ là thành viên. Bạn rõ ràng không muốn chỉ định thành viên.

find … -exec … {} +sản phẩm thay thế {}với mutliple đường dẫn. Đường dẫn quá mức được hiểu là thành viên của ar. Bạn cần find … -exec … {} … \;mà subsitutes {}chỉ với một con đường.

find . -name '*.lib' -exec ar -x {} \;

Bằng cách này, mọi tệp được tìm thấy được chuyển đến một tệp riêng ar và đáp ứng yêu cầu của nó cho chỉ một tệp lưu trữ.

Lưu ý: -execdircó thể hoặc không thể tốt hơn cho bạn. Tham khảo để man 1 findtìm hiểu sự khác biệt.


Ồ Cảm ơn câu trả lời chi tiết và nhanh chóng. Tôi cũng vui mừng khi biết rằng câu trả lời ban đầu của tôi không quá xa vời.
Alerra
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.