GNU 并行正确使用与 tar、xz、gpg 结合使用

GNU 并行正确使用与 tar、xz、gpg 结合使用

我想加快我的归档操作,我通常会进行 23 GiB(一张蓝光)备份。

我发现了这个:如何使用GnuPG和GNU并行进行大文件并行加密?


因为我根本不理解这段代码(从未使用过parallel):

tar --create --format=posix --preserve-permissions --same-owner --directory $BASE/$name --to-stdout . |
    parallel --pipe --recend '' --keep-order --block-size 128M "xz -9 --check=sha256 |
    gpg --encrypt --recipient $RECIPIENT;echo bLoCk EnD" |
    pv > $TARGET/$FILENAME

我想问一下有没有人可以帮我解析一下。谢谢。

答案1

tar运行命令tar

--create创建一个 tar 存档。

--format=posix使用 POSIX 格式的 tar 存档。这意味着您可以在支持 POSIX 格式的其他系统上提取它。

--preserve-permissions对文件保持相同的权限

--same-owner保持文件的相同所有者(仅在以 root 身份提取时相关)

--directory $BASE/$name开始之前更改为目录 $BASE/$name

--to-stdout不保存到文件,而是将输出发送到 stdout

.压缩整个目录

|通过管道将 stdout 传递到下一个命令

parallel并行不悖

--pipe使用管道模式,因此 stdin 上的输入将作为 stdin 上的输入提供给要运行的命令(而不是作为命令行参数,这是正常模式)。

--recend ''通常 GNU Parallel 在 \n 上分割。禁用它,因为输入不是文本,而是二进制数据。

--keep-order确保在第二个命令的输出之前打印第一个命令运行的输出 - 即使第二个命令先完成。

--block-size 128M将 128 MB 数据块传递给命令。

"..."要运行的命令

|通过管道将 stdout 传递到下一个命令

pv显示发送数据的速度

> $TARGET/$FILENAME将标准输出重定向到 $TARGET/$FILENAME

GNU Parallel 为每个 128MB 块启动此命令:

xz命令 xz

-9压缩级别9

--check=sha256在输出中包含完整性检查,以便能够捕获位错误(例如,在有故障的磁盘上)。

|通过管道将 stdout 传递到下一个命令

gpgGNU 隐私保护命令

--encrypt加密来自 stdin 的数据

--recipient $RECIPIENT使用 $RECIPIENT 的密钥进行加密

;命令分隔符

echo bLoCk EnD打印块结束

相关内容