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

时间:2012-03-02 09:44:11

标签: linux command-line gzip tar compression

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

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

4 个答案:

答案 0 :(得分:2)

基于Jan-Philip Gehrcke的回应:

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

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

答案 1 :(得分:0)

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

要压缩,您可以使用:

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

这会生成一个连接的tar档案文件,一起压缩到生成的文件中(您也可以使用cz并省略| gzip,因为连接gzip档案仍然是有效的gzip,但是你会丢失一点点如果使用bzip2或xz而不是gzip,则压缩或压缩很多。

要提取生成的文件, 使用tar的--ignore-zeros-i选项,不仅要提取第一个存档:

tar xizf archive.tar.gz

答案 2 :(得分:-1)

  

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

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

答案 3 :(得分:-1)

您可以使用find(带有-size标志)和xargs的组合将其传递给tar。

类似的东西:

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

小于100k的文件。请参阅man find以了解其他尺寸选项

相关问题