2

想也许这里有人可能知道发生了什么,但基本上我要做的是获取一个目录,并制作一个 tar 文件,省略两个级别的子目录(root/1/2)。鉴于它需要在一堆平台上工作,我认为最简单的方法是查找并 egrep 该目录,这很好地为我提供了文件列表。

但随后我将该文件列表通过管道传输到xargs tar rvf命令中,生成的文件类似于 33gb。我试图将 find 输出到一个文件中,并使用tar -T该文件作为输入,它仍然输出大约 33gb,当我对整个目录进行直接 tar(不省略任何内容)时,它会出现在我的位置d 期望它是 6-ish gb。

有什么想法吗?或者如何解决这个问题?我真的需要弄清楚这一点,我猜它与向它提供文件列表而不是让它只是 tar 一个目录有关,但不知道如何解决这个问题。

4

2 回答 2

0

您的 find 命令将返回目录和文件

考虑使用 find 来查找目录并排除一些

tar cvf /path/to/archive.tar $(find suite -type d ! -name 'suite/tmp/Shared/*')
于 2012-11-09T00:32:51.960 回答
0

当您在文件列表中指定目录时,tar将目录和其中的所有文件打包。如果您随后单独列出目录中的文件,它会(再次)打包文件。如果列出子目录,它会再次打包每个子目录的内容。等等。

如果您要创建文件列表,请确保它确实是文件列表并且不包含任何目录。

find . -type f ...

省略号可能是find消除子目录中文件的选项,也可能是grep -v消除它们的选项。请注意,-name通常只匹配名称的最后一个组成部分。GNUfind具有! -path '*/subdir/*'或变体允许您根据路径删除文件,而不仅仅是名称:

find . -type f ! -path './root/1/2/*' -print
于 2012-11-09T00:37:46.090 回答