使用.tarignore文件从tar存档中排除目录

时间:2016-09-15 15:07:26

标签: linux archive tar gitignore ignore

以与.gitignore类似的方式,是否可以执行子目录中的.tarignore文件,使其在执行时从存档中排除

tar cfjvh backup.tar.bz2 .

(我知道--exclude的{​​{1}}参数,但这不是我想要的。

2 个答案:

答案 0 :(得分:1)

您可以执行类似

的操作
$ COPYFILE_DISABLE=true tar -c --exclude-from=.tarignore -vzf archiveName.tar.gz

细分: -

  • COPYFILE_DISABLE=true的原因是确保以._开头的文件未包含在.tar文件中。如果您经常执行export COPYFILE_DISABLE=true操作,请在Mac上将~/.bash_profile永久添加到tar
  • –exclude-from=.tarignore:忽略.tarignore
  • 中列出的所有文件和文件夹

您可以在.tarignore中找到以下内容,此处为我的

$ cat .tarignore
.DS_Store
.git
.gitignore

答案 1 :(得分:1)

使用--exclude-ignore=.tarignore选项会导致Tar以与git使用.tarignore文件类似的方式使用.gitignore个文件。使用与.gitignore文件中通常使用的语法相同的语法,因此如果要忽略特定目录中的所有子目录和文件,请将.gitignore文件添加到*目录。例如:

$ find dir
dir
dir/a
dir/b
dir/c
dir/dir1
dir/dir1/1a
dir/dir1/1b
dir/dir2
dir/dir2/2a
dir/dir2/2b
$ echo "*" > dir/dir1/.tarignore
$ tar -c --exclude-ignore=.tarignore -vjf archive.tar.bz2 dir
dir/
dir/a
dir/b
dir/c
dir/dir1/
dir/dir2/
dir/dir2/2a
dir/dir2/2b

如果要忽略所有具有空.tarignore文件的目录,请查看--exclude-tag-all=.tarignore选项。

$ find dir
dir
dir/a
dir/b
dir/c
dir/dir1
dir/dir1/1a
dir/dir1/1b
dir/dir2
dir/dir2/2a
dir/dir2/2b
$ touch dir/dir1/.tarignore
$ tar -c --exclude-tag-all=.tarignore -vjf archive.tar.bz2 dir
tar: dir/dir1/: contains a cache directory tag .tarignore; directory not dumped
dir/
dir/a
dir/b
dir/c
dir/dir2/
dir/dir2/2a
dir/dir2/2b

另请查看--exclude-tag=--exclude-tag=选项,这些选项的行为略有不同。