我想在Linux中压缩一个目录。我创建了一个tar.gz文件,由于该目录包含一些*.o文件和一些pdf文件,因此它变成了一个大文件。
有没有办法压缩一个目录但排除大于预定义大小的文件? tar命令中有一个--exclude参数,但我想拒绝大于1 MB的文件。这是限制条件,而不是文件名。
我想在Linux中压缩一个目录。我创建了一个tar.gz文件,由于该目录包含一些*.o文件和一些pdf文件,因此它变成了一个大文件。
有没有办法压缩一个目录但排除大于预定义大小的文件? tar命令中有一个--exclude参数,但我想拒绝大于1 MB的文件。这是限制条件,而不是文件名。
根据Jan-Philip Gehrcke的回复:
find . -type f -size -1024k -print0 | tar -czf --null -T - -f archive.tar.gz
...| tar c --null -T -
解决方案是最好的,如果您有足够的内存(即文件列表很容易适合您的内存(在大多数情况下,这是正确的))。但是,如果您受到内存限制,xargs确实有用处,但必须适当使用,以使多个tar调用没有不良影响。find . -type f -size -1024k | xargs tar c | gzip > archive.tar.gz
cz
并省略| gzip
,因为连接gzip归档仍然是有效的gzip,但您会失去一点压缩,如果使用bzip2或xz而不是gzip,则会失去相当多的压缩)。--ignore-zeros
或-i
选项来不仅提取第一个存档:tar xizf archive.tar.gz
find . -size -100k -print | xargs tar cvf archive.tar
对于小于100k的文件,请参阅find命令手册以获取其他大小选项。
find . -print0 | tar --null -T - ...
(来自 tar 手册:“如果您将单个破折号作为‘--files-from’的文件名(即指定--files-from=-或-T -),则文件名将从标准输入中读取。”)。 - Dr. Jan-Philip Gehrcke
tar: Multiple archive files require '-M' option
但是使用以下命令可以解决:find . -type f -size -100k | tar -cz -f test.tgz -T -
- Fluxine...| tar c --null -T -
这个方法可以在任意长的文件列表上很好地工作,但有一个小缺点:它会将整个文件列表存储在内存中。如果你有很多小文件,那可能会成为一个问题。 - P.Péter./file1\n./file1./file3\n
以及一个错误消息无法查看状态: 文件名太长tar: 由于先前的错误而退出失败状态
。 - Dima Lituiev