为任何命令添加进度条

2025-06-10

为任何命令添加进度条

您是否曾尝试压缩一个巨大的文件,然后在终端前等待了一会儿,想知道是否应该去喝杯咖啡或者它是否即将完成?

在花了一些时间处理大型文件并尝试弄清楚我进步了多少之后,我最终发现了一些技巧,并决定将其工业化。进入Spybar

原始`spybar gzip -c that_big_file.dat` endraw

这是一个简单的 Python 脚本,你可以使用

pip install spybar
Enter fullscreen mode Exit fullscreen mode

如果您在命令前添加此命令,它将启动该命令并显示进度条。您也可以将其附加到现有的 PID。所有说明请参阅 readme 文件

然而,本文并非讨论该工具的使用方法,而是讨论其工作原理。

首先声明一下,它只兼容 Linux。在其他操作系统上可能也有类似的方法,但本文不讨论这个问题。

在Linux中,有一个特殊的目录,/proc其中包含每个正在运行的进程的目录。

假设您正在处理进程42,您可以通过执行以下操作列出进程打开的所有文件

ls -lsh /proc/42/fd
Enter fullscreen mode Exit fullscreen mode

在 C 语言中,打开文件时会得到一个整数,它是文件句柄。所有这些整数都列在fd目录中。它们都是指向实际打开文件的符号链接。使用ls,找到所需文件后,就可以记下它的编号。假设你对数字 感兴趣3

还有一个文件夹,里面包含一些关于这些处理程序的元信息。你可以简单地通过以下方式访问它:

cat /proc/42/fdinfo/3
Enter fullscreen mode Exit fullscreen mode

您将获得类似这样的结果:

pos:    569573376
flags:  0104000
mnt_id: 28
Enter fullscreen mode Exit fullscreen mode

包括向pos我们指出处理程序指向的确切位置的行。

然后你只需要知道文件的大小,然后你就知道当前位置和文件大小,这就是生成进度条所需要的全部内容。

做了一段时间之后,我觉得应该写个小工具,于是就写到这里。感谢阅读!

鏂囩珷鏉ユ簮锛�https://dev.to/xowap/add-progress-bars-to-any-command-1f58
PREV
澄清 GDPR 我们有 Cookie 同意文化 功能级别 保持清洁 可移植性 保持追踪 谁需要遵守?核对清单
NEXT
开发人员常用的 5 个 C# OCR 库