You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将/dev/tty输出重定向到文件?tar进度记录方案求助

解决tar进度保存到文件并实现单行覆盖的方法

方法1:直接用printf实现

tar的--checkpoint-action支持调用系统自带的printf命令(几乎所有系统都预装),它能处理\r转义字符实现单行覆盖,同时把输出写入文件。

执行命令:

tar -cf archive.tar your_large_files --checkpoint=1000 --checkpoint-action='exec=printf "Processed: %T\r" >> progress.log'
  • --checkpoint=1000:每处理1000个文件/数据块触发一次进度更新,数值可按需调整(大文件调大,小文件调小)
  • %T是tar内置的进度格式,输出已完成的百分比
  • \r让新的进度输出覆盖文件里的当前行,避免日志被大量重复行填满

如果想同时在终端看进度+写入文件,改成:

tar -cf archive.tar your_large_files --checkpoint=1000 --checkpoint-action='exec=printf "Processed: %T\r" | tee -a progress.log'

方法2:用简单脚本自定义格式

要是需要更灵活的进度记录(比如加时间戳),写个小脚本就行:

  1. 新建tar_logger.sh:
#!/bin/bash
# 写入带时间戳的进度到文件,同时保持单行覆盖
printf "[%s] Progress: %s\r" "$(date +'%Y-%m-%d %H:%M:%S')" "$1" >> progress.log
# 可选:同步输出到终端
printf "[%s] Progress: %s\r" "$(date +'%Y-%m-%d %H:%M:%S')" "$1"
  1. 给脚本加执行权限:
chmod +x tar_logger.sh
  1. 用tar调用脚本:
tar -cf archive.tar your_large_files --checkpoint=1000 --checkpoint-action='exec=./tar_logger.sh "%T"'

查看进度文件的技巧

因为文件里有\r控制字符,直接用cat看会看到最后一行覆盖前面的效果,想看完整历史进度的话,把回车换成换行:

cat progress.log | tr '\r' '\n'

或者用less -r progress.log可以正确显示带格式的内容。

内容的提问来源于stack exchange,提问作者Alex B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:32:15