我需要备份一个相当大的目录,但我受到单个文件大小的限制。我想基本上创建一个tar.(gz|bz2)档案,该档案被分成 200MB 的最大档案。Clonezilla 通过拆分像这样命名的映像备份来做类似的事情:
sda1.backup.tar.gz.aa
sda1.backup.tar.gz.ab
sda1.backup.tar.gz.ac
Run Code Online (Sandbox Code Playgroud)
有没有办法在一个命令中做到这一点?我了解如何使用该split命令,但我不想创建一个巨大的存档,然后将其拆分为较小的存档,因为这将使我最初创建存档所需的磁盘空间增加一倍。
jor*_*anm 139
您可以通过管道将 tar 传输到 split 命令:
tar cvzf - dir/ | split --bytes=200MB - sda1.backup.tar.gz.
Run Code Online (Sandbox Code Playgroud)
在某些 *nix 系统(如 OS X)上,您可能会收到以下错误:
split: illegal option -- -
Run Code Online (Sandbox Code Playgroud)
在这种情况下,试试这个(注意-b 200m):
tar cvzf - dir/ | split -b 200m - sda1.backup.tar.gz.
Run Code Online (Sandbox Code Playgroud)
如果您碰巧尝试拆分文件以适合 FAT32 格式的驱动器,请使用 4294967295 的字节限制。例如:
tar cvzf - /Applications/Install\ macOS\ Sierra.app/ | \
split -b 4294967295 - /Volumes/UNTITLED/install_macos_sierra.tgz.
Run Code Online (Sandbox Code Playgroud)
当您要提取文件时,请使用以下命令(如@Naftuli Kay 评论的那样):
cat sda1.backup.tar.gz.* | tar xzvf -
Run Code Online (Sandbox Code Playgroud)
小智 21
tar分割存档我发现这是最好的解决方案,原因如下:
tar选项此命令创建 2GB 块而不压缩:
tar -cv --tape-length=2097000 --file=my_archive-{0..50}.tar file1 file2 dir3
Run Code Online (Sandbox Code Playgroud)
类似地,此命令通过gzip压缩创建 1GB 块:
tar -czv --tape-length=2097000 --file=my_archive-{0..50}.tar.gz file1 file2 dir3
Run Code Online (Sandbox Code Playgroud)
Eri*_*lun 14
在 macOS 上,该split命令的工作方式略有不同:
$ tar cvzf - foo | split -b 2500m - foo.tgz.
Run Code Online (Sandbox Code Playgroud)
小智 5
只是补充一下:由于 vfat/fat32 中允许的最大文件大小为 2^32 减 1(4294967295 字节),因此在此类文件系统上允许的最大文件大小的 split 命令为:
split -b4294967295 -d my_input_file my_output_file_splitted
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
139455 次 |
| 最近记录: |