如何使用 GNU 并行使用 lz4 压缩当前目录中的所有文件?
我尝试ls | parallel lz4
但它输出到stdout
.为什么?怎么修?
答案1
使用-m
多个输入文件的选项(意味着自动输出文件名)。
ls | parallel lz4 -m
答案2
但它输出到
stdout
.为什么?怎么修?
答案在手册页中......
为什么它输出到stdout
:
• When no destination is specified, result is sent on implicit output, which depends on stdout status. When stdout is Not the
console, it becomes the implicit output. Otherwise, if stdout is the console, the implicit output is filename.lz4.
在这种特殊情况下(parallel
运行lz4
)stdout
不是控制台(请参阅钢铁起子的回答这里);另外,如果您检查输出,它会包含警告:
Warning : using stdout as default output. Do not rely on this behavior: use explicit `-c` instead !
如何修复(手册页的下一段):
• It is considered bad practice to rely on implicit output in scripts. because the script's environment may change. Always use
explicit output in scripts. -c ensures that output will be stdout. Conversely, providing a destination name, or using -m en‐
sures that the output will be either the specified name, or filename.lz4 respectively.
所以正确的方法是提供目的地名称
parallel lz4 {} {}.lz4 ::: ./*
或使用-m
开关(相同的结果但不冗长):
parallel lz4 -m ::: ./*