GNU tar 1.34中--exclude-ignore参数行为不符合预期的问题咨询
我最近在用Ubuntu 22.04自带的GNU tar 1.34版本时碰到了个费解的问题,想请教下大家。
我的文件结构如下:
dir/ dir/.ignore dir/file.ext dir/subdir/ dir/subdir/other_file.ext
其中dir/.ignore里只有一行规则:*.ext。
按照我的预期,执行这条命令:
$ tar -czvf dir.tgz --exclude-ignore=.ignore dir
生成的dir.tgz应该包含dir/.ignore和dir/subdir/other_file.ext,但排除dir/file.ext——毕竟手册里说--exclude-ignore的规则只对当前目录生效,子目录不受父目录.ignore的影响。
可实际运行后,我查看压缩包内容,得到的却是:
dir/ dir/subdir/ dir/.ignore
dir/subdir/other_file.ext居然也被排除了,这完全和预期不符。
我特意翻了tar的man手册:
--exclude-ignore=FILE
Before dumping a directory, see if it contains FILE. If so, read exclusion
patterns from this file. The patterns affect only the directory itself.
还有对应的递归版本说明:
--exclude-ignore-recursive=FILE
Same as --exclude-ignore, except that patterns from FILE affect both the
directory and all its subdirectories.
按道理--exclude-ignore的规则只该作用在dir/本身,不该影响dir/subdir/里的文件,但实际结果却是子目录的.ext文件也被过滤了。
提前说明下:我确认dir/subdir/下没有额外的.ignore文件,不存在误触发的情况。
有没有人遇到过类似问题?或者我是不是对这个参数的理解有什么偏差?
备注:内容来源于stack exchange,提问作者Confusion

