如何用tar压缩目录时排除大文件

我想在Linux中压缩一个目录。 我创build了一个tar.gz ,它变成了一个大文件,由于该目录包含一些* .o文件和一些pdf文件。

有没有办法压缩一个目录,但排除大于预定义大小的文件 在tar命令中有一个–exclude参数,但是我想拒绝大于1MB的文件。 这是约束,而不是文件的名称。

找到./myRep/ -type f -size -1024k | xargs tar cfvz myArchive.tar

总之,这个表达式的第一部分从./myRep/递归地构造一个大小低于1024k的文件列表,第二部分创建tar / gzip压缩文件。

基于Jan-Philip Gehrcke的回应:

 find . -type f -size -1024k | tar -czf --null -T - -f archive.tar.gz 

对于小于1M的文件。 测试在OS X和Ubuntu Linux上。

...| tar c --null -T - ...| tar c --null -T -上面的解决方案是最好的,如果你有足够的内存(即文件列表适合你的记忆容易(在大多数情况下,这是真的))。 但是,如果你受内存限制,xargs 确实有一席之地,但是你必须恰当地使用它,以便多个tar调用没有任何不良影响。

要压缩,你可以使用:

 find . -type f -size -1024k | xargs tar c | gzip > archive.tar.gz 

这导致了一个连接的tar归档文件,一起gzip到所得到的文件中(你也可以使用cz和omit | gzip作为连接gzip压缩文件仍然是有效的gzip,但是你失去了一点压缩,或者压缩了很多如果您使用bzip2或xz而不是gzip)。

要提取结果文件, 必须使用tar的--ignore-zeros-i选项来提取第一个压缩文件:

 tar xizf archive.tar.gz 

你可以使用find(和它的-size标志)和xargs的组合将它传递给tar。

就像是:

 find . -size -100k -print | xargs tar cvf archive.tar 

对于小于100k的文件。 看到男人找到其他大小的选项