如何在单个 exec 命令中将 tar.gz 拆分为多个文件?

如何在单个 exec 命令中将 tar.gz 拆分为多个文件?

我对 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 . 然后,splittar文件大小为100Mbs

split -b 100M /backups/_structure.tar.gz

这将创建一个具有奇怪名称的文件,例如 xaa、xab...

要再次获得原始文件,只需cat所有这些文件:

cat xaa xab xac... > _structure.tar.gz

相关内容