Chỉ sử dụng các tính năng khả dụng trên AIX hoặc các hệ thống POSIX khác và khó hơn:
find /usr/something/* /usr/something/.[!.]* /usr/something/..?* \
-prune -type f -user antoine -exec zip -r /tmp/file.zip {} +
findđệ quy vào các thư mục con. Để tránh điều đó, hãy -prunebảo nó đừng đi vào các thư mục mà nó gặp. Điều đó không tốt nếu tôi chạy find /usr/something -type d -prune -o …vì sau đó /usr/somethingsẽ bị bỏ qua. Vì vậy, tôi chạy findtrên tất cả các mục trong thư mục đó, ngoại trừ .và ...
Một thành ngữ dễ dàng hơn là chuyển sang thư mục và .đặc biệt xử lý thư mục bắt đầu . Ở đây, nó sẽ thay đổi kho lưu trữ kết quả, trong đó sẽ có các đường dẫn của biểu mẫu ./foothay vì usr/something/foo. Kỹ thuật này dựa trên thực tế là -name .chỉ phù hợp với thư mục bắt đầu, mọi tệp gặp phải khác sẽ có tên riêng.
cd /usr/something &&
find . ! -name . -prune -type f -user antoine -exec …
Lưu ý rằng zipcó thể được thực thi nhiều lần nếu danh sách tên tệp quá dài cho một lệnh gọi. Điều này là ổn vì zip -rthay thế các tập tin hiện có trong kho lưu trữ; nếu bạn sử dụng một trình lưu trữ khác, lưu ý không gọi nó trong chế độ nơi nó sẽ tạo một kho lưu trữ mới (ví dụ: không sử dụng tar -c).
find -user antoinedưới dạng đối số để nén.zipThật không may, không có tùy chọn để đọc tên tệp được phân tách bằng NUL và do đó không xử lý tốt các tệp có khoảng trắng và dòng mới trong tên nếu được cung cấp từ một lệnh khác. Thay thế là để viết một kịch bản python, nó có một mô-đun zip tốt và có tên tệp đặc biệt dễ dàng xử lý.