我对 Unix/Linux 一无所知。我主要是一名网络程序员。
我在我的代码中运行以下命令:
exec("tar -caf '/backups/_structure.tar.gz' --ignore-failed-read -C /source .");
这段代码对我的目录中的所有内容进行文件备份/source
并将其存储在该/backup
目录中。这段代码工作得很好,除了有时我的文件很大。
我想将 tar 文件分割为 100MB 的段。在这一行中,我要添加什么来做到这一点?我读过一些关于 的内容| split -b 100MB
,但我不知道该把它放在哪里,我很困惑。
答案1
tar -cf - --ignore-failed-read -C /source . | gzip |
split -b 100M - /backups/_structure.tar.gz.
整个要点tar
是它发送一个流,我们可以通过管道即时压缩、即时分割、通过网络发送等,而无需存储临时文件。
-f -
告诉tar
在 stdout 上发送存档,这里通过管道连接到gzip
,它会动态压缩它并将其发送到split
。
-
告诉split
从标准输入获取输入。第二个参数是块的前缀。如果您不喜欢默认值,请参阅手册页了解split
如何更改这些块的命名方案。
同样,要提取该存档,无需存储完整tar.gz
文件,只需使用:
cat _structure.tar.gz.* | gunzip | (cd /dest && tar xf -)
答案2
首先,创建 tar 文件:
tar -caf '/backups/_structure.tar.gz' --ignore-failed-read -C /source .
然后,split
tar文件大小为100Mbs
split -b 100M /backups/_structure.tar.gz
这将创建一个具有奇怪名称的文件,例如 xaa、xab...
要再次获得原始文件,只需cat
所有这些文件:
cat xaa xab xac... > _structure.tar.gz