Lưu ý phụ:
Luôn luôn, luôn tránh xargs (1). Đó là một công cụ bị hỏng và chỉ hữu ích từ xa nếu bạn sử dụng nó với tùy chọn -0. Thậm chí sau đó, nó hầu như luôn luôn tốt hơn để sử dụng tùy chọn -exec tìm (1), hoặc một vòng lặp đơn giản cho hoặc trong khi.
Tại sao xargs quá tệ? Thứ nhất, nó chia tách đầu vào trên khoảng trắng, có nghĩa là tất cả các tên tệp của bạn mà chứa khoảng trắng sẽ gây ra sự cố. Thứ hai, số cố gắng làm smartass và báo giá phân tích cú pháp cho bạn. Điều này chỉ khiến bạn đau đầu hơn khi bạn sử dụng tên tệp trên chứa trích dẫn như một phần của tên tệp, chẳng hạn như bài hát: "Tôi không muốn bỏ lỡ một điều.mp3".Điều này sẽ chỉ làm xargs nôn và nguyền rủa với bạn rằng bạn trích dẫn đầu vào của nó xấu. Không, bạn đã không: chỉ nên biết rằng các báo giá không thuộc về dữ liệu đầu vào, chúng thuộc về các tập lệnh shell và xargs không có doanh nghiệp nào cố gắng phân tích chúng.
Hãy nhớ bạn, xargs (1) không thực hiện phân tách khoảng trắng hoặc phân tích cú pháp trích dẫn khi bạn chuyển -0 cho nó. Nó thực hiện quyền , sử dụng byte NULL để phân định tên tệp. Nhưng điều đó có nghĩa là bạn cần cung cấp cho nó đầu vào sử dụng các tên tệp được phân cách bằng byte NULL (chẳng hạn như "find -foo -print0"). Điều này đưa chúng ta trở lại: tốt hơn là chỉ cần sử dụng find -exec: "find -foo -exec bar {} +".
tôi đã làm sai với việc tìm kiếm nhiều lần xâm nhập tar trước đây, suy nghĩ khi đưa chúng vào {...} | lzma ... nó hoạt động. nhưng sau đó nó sẽ in lại tiêu đề tar mỗi lần: p –
Tuyệt vời, đây là một giải pháp hoàn hảo; cảm ơn! – jparanich
Trong trường hợp bất cứ ai tìm thấy điều này và không rõ ràng * cách nó hoạt động, '<(command)' trong bash tạo ra một "tên mô tả tập tin" gắn liền với đầu ra của 'lệnh'. Vì vậy, trong trường hợp này, 'tar' thấy một đối số như' --files-from/dev/fd123', nhưng đọc từ "tệp" '/ dev/fd123' chỉ cung cấp cho nó đầu ra của' find', mà không cần cho một tệp tạm thời thực sự. – IMSoP