Có một lệnh shell / script đơn giản hỗ trợ loại trừ các tệp / thư mục nhất định khỏi được lưu trữ không?
Tôi có một thư mục cần được lưu trữ với một thư mục con có một số tệp rất lớn mà tôi không cần sao lưu.
Không hoàn toàn là giải pháp:
Các tar --exclude=PATTERN
lệnh phù hợp với mô hình nhất định và không bao gồm những tác phẩm, nhưng tôi cần file cụ thể và thư mục được bỏ qua (đường dẫn tập tin đầy đủ), nếu không hồ sơ hợp lệ có thể được loại trừ.
Tôi cũng có thể sử dụng lệnh find để tạo danh sách các tệp và loại trừ những tệp tôi không muốn lưu trữ và chuyển danh sách sang tar, nhưng chỉ hoạt động với một lượng nhỏ tệp. Tôi có hàng vạn.
Tôi bắt đầu nghĩ giải pháp duy nhất là tạo một tệp có danh sách các tệp / thư mục cần loại trừ, sau đó sử dụng rsync với --exclude-from=file
để sao chép tất cả các tệp vào thư mục tmp, sau đó sử dụng tar để lưu trữ thư mục đó.
Bất cứ ai cũng có thể nghĩ về một giải pháp tốt hơn / hiệu quả hơn?
EDIT: Giải pháp của Charles Ma hoạt động tốt. Gotcha lớn là --exclude='./folder'
PHẢI ở đầu lệnh tar. Lệnh đầy đủ (đầu tiên là cd, vì vậy sao lưu có liên quan đến thư mục đó):
cd /folder_to_backup
tar --exclude='./folder' --exclude='./upload/folder2' -zcvf /backup/filename.tgz .
--exclude
không phải là đầu tiên nhưng nó phải đến một nơi nào đó trước thư mục nguồn (được thử nghiệm với tar 1.29 trên Cygwin).