如何获取 tar 命令的标准输出

时间:2021-02-17 17:19:40

标签: linux bash tar

我正在尝试 tar 文件并将其输出存储在变量中。 我试过了,但它不起作用:

resulting_tar=$(tar -zcf "$(date '+%Y-%m-%d').tar.gz" folder)

知道我该怎么做吗?

2 个答案:

答案 0 :(得分:5)

默认情况下,tar 不报告创建的文件的名称。事实上,除非你告诉它,否则它不会说什么,而且给出的选项也不会让它说什么。

请注意,tar 不会告诉您它创建了什么文件。您告诉 tar 要创建什么文件。

您需要在变量中捕获文件的名称并自行报告:

file="$(date '+%Y-%m-%d').tar.gz"
tar -czf "$file" folder
echo "$file"

尝试运行tar -czf /dev/null folder;你不会从(大多数实现)tar 中看到任何东西——这不是因为我指定了 /dev/null。如果您愿意,请指定一个名称:tar -czf junk.tar.gz folder 并观察(缺少)输出 - 并记住删除 junk.tar.gz

您可能还需要考虑在 tar 文件名中包含文件夹名称。

folder="…whatever…"
file="$folder-$(date +'%Y-%m-%d').tar.gz"
tar -czf "$file" "$folder"
echo "$file"

答案 1 :(得分:0)

编辑: 在进一步澄清后不再适用。留给子孙后代。

您可能会同时查找 stdoutstderr。您可以通过将 2>&1 附加到您的命令来组合两个输出流:

resulting_tar=$(tar -zcf "$(date '+%Y-%m-%d').tar.gz" folder 2>&1)
相关问题