12

我有一些包含一些文件的目录

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

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

4

2 回答 2

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

不幸的是,附加不适用于压缩档案。

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

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

也可以创建一个文件,其中包含您想要包含的所有文件的名称,并将该列表提供给 tar 选项-T--files-from(或以类似方式列出要排除的文件并提供选项列表-X)。

文件列表.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
于 2012-04-19T14:13:03.460 回答
1

订单事项:

$ mkdir -p dir_archive/{somedir{1..3},mydir/{excludedir{1..3},otherone,my_archive_dir}}
$ touch dir_archive/{somedir{1..3},mydir/{excludedir{1..3},otherone,my_archive_dir}}/dir_file.txt
$ tar cvzf dir_archive.tar.gz dir_archive/mydir/my_archive_dir* --exclude "dir_archive/mydir/*" dir_archive
dir_archive/mydir/my_archive_dir/
dir_archive/mydir/my_archive_dir/dir_file.txt
dir_archive/
dir_archive/mydir/
dir_archive/somedir2/
dir_archive/somedir2/dir_file.txt
dir_archive/somedir1/
dir_archive/somedir1/dir_file.txt
dir_archive/somedir3/
dir_archive/somedir3/dir_file.txt

这本质上是在前面更加明确,然后仅将排除应用于父目录。

从https://unix.stackexchange.com/a/417707/420501无耻窃取

于 2020-07-01T02:00:45.900 回答