2012-04-19 61 views
11

我有一些目錄中有一些文件焦油:創建歸檔排除目錄,除了一個

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 

我想創建焦油(GZ)存檔dir_archive.tar.gz所有文件和目錄排除

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

但包括

dir_archive/mydir/my_archive_dir 

我不想用--exclude每個目錄

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

我嘗試使用--add-file,但它不工作:

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

存在着一些簡單的方法?由於

回答

20

一種方法是首先排除mydir再追加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 

不幸的是追加不壓縮的檔案工作。

--exclude選項接受一個模式作爲參數,因此,如果要排除的迪爾斯的名稱很相似,你可以避開他們,還是包括歸檔目錄

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

也可以創建一個文件,其中包含您想要包含的所有文件的名稱,並使用選項-T--files-from(或以類似的方式列出要排除的文件,併爲列表提供選項-X)將該列表提供給tar。

 
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

感謝您詳盡解答 – kubedan 2012-04-20 09:26:24

+1

當心,焦油隱含提出一個'*'在-X輸入每一行之前; dir_archive將匹配dir_archive/dir_archive,這可能是一個大問題。 – rcreswick 2015-04-16 21:21:16