Тар: создать архив исключить каталоги, кроме одного

У меня есть несколько каталогов с некоторыми файлами

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

Я хочу создать tar (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

Существует простой способ? Благодаря

Ответ 1

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