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

Bas*_*asj 4 linux ignore tar archive gitignore

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

tar cfjvh backup.tar.bz2 .
Run Code Online (Sandbox Code Playgroud)

(我知道--exclude参数,tar但这里不是我想要的)。

Ini*_*ian 6

你可以做类似的事情

$ COPYFILE_DISABLE=true tar -c --exclude-from=.tarignore -vzf archiveName.tar.gz
Run Code Online (Sandbox Code Playgroud)

细分:-

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

你可以有以下内容.tarignore,这是我的

$ cat .tarignore
.DS_Store
.git
.gitignore
Run Code Online (Sandbox Code Playgroud)


McM*_*wer 6

我刚刚发现git有一个工具可以打包跟踪的文件本身: git archive。使用它可能是最简单的方法。

编辑:如果您想使用尚未提交(但已跟踪)的文件/数据制作一个包,请使用tar -czf files.tar.gz $(git ls-files)works。


Tim*_*Tim 5

使用该--exclude-ignore=.tarignore选项会导致 Tar 以.tarignore类似于 git 使用.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
Run Code Online (Sandbox Code Playgroud)

如果要忽略所有包含空.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
Run Code Online (Sandbox Code Playgroud)

另请查看--exclude-tag=--exclude-tag=选项,它们是行为略有不同的变体。