2012-04-19 15 views
11

Tôi có một số thư mục với một số tác phẩmTar: tạo lưu trữ loại trừ thư mục ngoại trừ một

dir_archive/somedir1 
dir_archive/somedir2 
dir_archive/somedir3 
dir_archive/mydir 
dir_archive/mydir/excludedir1 
dir_archive/mydir/excludedir2 
dir_archive/mydir/excludedir3 
dir_archive/mydir/many_other_directories... 
dir_archive/mydir/my_archive_dir 

Tôi muốn tạo tar (gz) lưu trữ dir_archive.tar.gz với tất cả các file và thư mục loại trừ

dir_archive/mydir/excludedir1 
dir_archive/mydir/excludedir2 
dir_archive/mydir/excludedir3 
dir_archive/mydir/many_other_directories... 

nhưng bao gồm

dir_archive/mydir/my_archive_dir 

tôi không muốn sử dụng --exclude cho mỗi thư mục

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir/excludedir1 --exclude=dir_archive/mydir/excludedir2 --exclude=dir_archive/mydir/excludedir3 

tôi cố gắng sử dụng --add-file, nhưng nó không hoạt động:

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir --add-file=dir_archive/mydir/my_archive_dir dir_archive 

Tồn tại một số cách đơn giản? Cảm ơn

Trả lời

20

Một cách sẽ là người đầu tiên không bao gồm mydir và sau đó gắn thêm các my_archive_dir

tar cvf dir_archive.tar --exclude=dir_archive/mydir dir_archive 
tar rvf dir_archive.tar dir_archive/mydir/my_archive_dir 
gzip dir_archive.tar 

Đáng tiếc là phụ thêm không làm việc với tài liệu lưu trữ nén.

Tùy chọn --exclude mất một mô hình như là đối số, vì vậy nếu tên của các dirs được loại trừ tương tự, bạn có thể tránh họ và vẫn bao gồm các thư mục lưu trữ

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir/exclude* dir_archive 

Nó cũng có thể để tạo ra một tệp có tên của tất cả các tệp mà bạn muốn đưa vào và đưa danh sách đó vào tar với tùy chọn -T hoặc --files-from (hoặc trong danh sách thời trang tương tự các tệp cần loại trừ và cung cấp danh sách với tùy chọn -X).

 
filelist.txt: 
dir_archive 
dir_archive/temp1 
dir_archive/mydir 
dir_archive/mydir/temp2 
dir_archive/mydir/my_archive_dir 
dir_archive/mydir/my_archive_dir/temp7 
tar cvfz dir_archive.tar.gz --no-recursion --files-from filelist.txt 
+0

Cảm ơn bạn đã trả lời đầy đủ – kubedan

+1

Hãy coi chừng, tar ngầm đặt một '*' trước mỗi dòng trong đầu vào -X; dir_archive sẽ khớp với dir_archive/dir_archive, mà * có thể * là một vấn đề lớn. – rcreswick