Tar:创建除一个以外的归档排除目录

kub*_*dan 12 unix gzip tar archive

我有一些文件的目录

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
Run Code Online (Sandbox Code Playgroud)

我想创建tar(gz)存档dir_archive.tar.gz,不包括所有文件和目录

dir_archive/mydir/excludedir1
dir_archive/mydir/excludedir2
dir_archive/mydir/excludedir3
dir_archive/mydir/many_other_directories...
Run Code Online (Sandbox Code Playgroud)

但包括

dir_archive/mydir/my_archive_dir
Run Code Online (Sandbox Code Playgroud)

我不想--exclude用于每个目录

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir/excludedir1 --exclude=dir_archive/mydir/excludedir2 --exclude=dir_archive/mydir/excludedir3
Run Code Online (Sandbox Code Playgroud)

我尝试使用--add-file,但它不起作用:

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir --add-file=dir_archive/mydir/my_archive_dir dir_archive
Run Code Online (Sandbox Code Playgroud)

存在一些简单的方法?谢谢

Edu*_*Edu 21

一种方法是首先排除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
Run Code Online (Sandbox Code Playgroud)

不幸的是,附加功能不适用于压缩档案.

--exclude选项将模式作为参数,因此如果要排除的目录名称相似,则可以避免它们并仍包含存档目录

tar cvfz dir_archive.tar.gz --exclude=dir_archive/mydir/exclude* dir_archive
Run Code Online (Sandbox Code Playgroud)

也可以创建一个文件,其中包含您要包含的所有文件的名称,并使用选项-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
Run Code Online (Sandbox Code Playgroud)