How to exclude big files while compressing a directory with tar
我想在Linux中压缩一个目录。我创建了一个tar.gz,它变成了一个大文件,因为这个目录包含一些*.o文件和一些pdf文件。
是否有任何方法压缩目录,但排除大于预定义大小的文件?tar命令中有--exclude参数,但是我想拒绝大于1 MB的文件。这是约束,而不是文件名。
基于1月菲利普gehrcke的反应:
1
| find . -type f -size -1024k | tar -czf --null -T - -f archive.tar.gz |
对于小于1M的文件。测试在OS X和Linux的Ubuntu。
- 在Debian挤压事件中,我犯了这样的错误:tar: Multiple archive files require '-M' option,但它的作用类似于:find . -type f -size -100k | tar -cz -f test.tgz -T -。
- @Fluxine也不能让它工作。不得不看stackoverflow.com/q/5891866/63736,最后是find . -type f -size 1M -print0 | tar -vzcf backup.tar.gz --null -T -。
- ...| tar c --null -T - 解决方案可以很好地处理任意长的文件列表,但有一个小缺点:它将整个文件列表存储在内存中。如果你有很多小文件,那可能是个问题。
- 在Ubuntu上,我得到了像./file1
./file1./file3
和Cannot stat: File name too long tar: Exiting with failure status due to previous errors这样的文件的长时间打印。
- 如本讨论中所述,可以通过包括-print0来解决。
《...| tar c --null -T -以上解决方案是最好的,如果你有充足的内存(即"文件列表适合进入你的记忆很容易(在大多数的案例,这是真的)。然而,有一个地方,xargs。如果你在记忆的约束,但你必须使用它appropriately焦油渣,invocations不多的不良效应。
两个compress,你可以使用。
1
| find . -type f -size -1024k | xargs tar c | gzip > archive.tar.gz |
这个结果在一部concatenated焦油档案文件,一起为《resulting gzip压缩过的文件(你也可以使用cz和omit | gzipAA级联gzip Gzip档案仍然有效,但你失去了一点小小的压缩,或很长一点,如果你使用bzip2压缩gzip或XZ而不是)。
两种提取物的resulting文件,你必须使用《--ignore-zeros期权(或-i焦油提取物的两个不只是第一吧:
你可以使用一个组合(以找到其大小的标志)和它的两个通xargs为焦油。
之类的东西。
1
| find . -size -100k -print | xargs tar cvf archive.tar |
对文件小于100K。看你找到的其他尺寸的选择
find ./myRep/ -type f -size -1024k | xargs tar cfvz myArchive.tar
在一个字,第一部分的这一表达生成列表文件,大小的冰下比从recursively 1024K。/ /二次方和myrep create焦油/ gzip档案。
- 这可能会重复调用tar。查看find . -print0 | tar --null -T - ...(来自tar手册:"如果您为'--文件来自','提供一个短划线作为文件名(即,您指定--files from=-或-t-),则从标准输入读取文件名。")