我在做什么:
XZ_OPT='-T0 -9 -vv' tar -vvcJf ~/backup.tar.xz ...FILES
我怀疑是否tar
真的通过了给定的选项,我已经尝试过这些事情:
- 我用过
-vv
,但输出中XZ_OPT
没有消息,也没有xz
--verbose
- 我还用来
ps aux | grep xz
查看是否tar
会有spawn
另一个进程xz
,但我没有看到tar
创建任何进程。
问题
- 环境真的有用吗
XZ_OPT
?如何验证呢? - 为什么执行过程中找不到
xz
进程tar
?tar
真的会产生压缩文件的进程吗?
环境
$ xz --version
xz (XZ Utils) 5.2.5
liblzma 5.2.5
$ tar --version
bsdtar 3.3.2 - libarchive 3.3.2 zlib/1.2.11 liblzma/5.0.5 bz2lib/1.0.6
答案1
- 环境真的有用吗
XZ_OPT
?如何验证呢?
向其传递无效的内容:
% XZ_OPT='--this-wont-work' tar -cJf foo.tar.xz foo
xz: unrecognized option '--this-wont-work'
xz: Try `xz --help' for more information.
tar: foo.tar.xz: Cannot write: Broken pipe
tar: Child returned status 1
tar: Error is not recoverable: exiting now
xz
为什么在 tar 执行过程中找不到进程?tar
真的会产生压缩文件的进程吗?
从上面的输出来看,确实如此。您的存档是否需要足够长的时间来创建以使该过程持续?ps aux | grep xz
两者都为我pgrep -fa xz
展示了流程。xz
很可能tar
不会显示它调用的程序的输出,除非它们失败。否则,他们可能会在输出中添加不受控制的噪声,而这并不是tar
其本身所要求的。
答案2
在大多数 shell 中,您使用的语法将创建该环境变量并“导出”它。之后,除非 tar显式地将其从环境中删除,每个子程序都会看到它。
我确实看到它有一些效果。对比一下这个:
$ XZ_OPT='-T0 -9 -vv' tar -cJf junk.tar.xz ~/.config
tar: Removing leading `/' from member names
xz: Filter chain: --lzma2=dict=64MiB,lc=3,lp=0,pb=2,mode=normal,nice=64,mf=bt4,depth=0
xz: Using up to 4 threads.
xz: 4,997 MiB of memory is required. The limiter is disabled.
xz: Decompression will need 65 MiB of memory.
100 % 2,541.8 KiB / 5,930.0 KiB = 0.429 0:01
与此(我删除了-vv
):
$ XZ_OPT='-T0 -9' tar -cJf junk.tar.xz ~/.config
tar: Removing leading `/' from member names