2012-04-19 3 views
11

У меня есть некоторые каталоги с некоторыми файламиTar: создать архив исключить каталоги, кроме одного

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 опция берет шаблон в качестве аргумента, так что если имена директорий должны быть исключены похожи, вы можете избежать их и по-прежнему включать в архив с Dir

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

Кроме того, можно создать файл с именами всех файлов, которые вы хотите включить, и укажите этот список для tar с опцией -T или --files-from (или в аналогичной форме списка файлы, которые необходимо исключить, и укажите список с опцией -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

Спасибо за исчерпывающие ответы – kubedan

+1

Берегитесь, деготь неявно ставит '*' перед каждой строкой в ​​-X ввода; dir_archive будет соответствовать dir_archive/dir_archive, который * может * быть большой сделкой. – rcreswick

Смежные вопросы