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 -prune
bả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/something
sẽ bị bỏ qua. Vì vậy, tôi chạy find
trê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 ./foo
thay 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 zip
có 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 -r
thay 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 antoine
dưới dạng đối số để nén.zip
Thậ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ý.