Linux find 命令 - 显示进度

Linux find 命令 - 显示进度

我想知道在 Linux 中使用 搜索文件时是否有任何方法可以显示某种进度信息find。我经常发现自己在大型磁盘上搜索文件,某种进度指示器会非常有用,例如一个进度条或至少当前目录中的“查找”搜索。是否有任何脚本可以做到这一点,或者是否find支持某些钩子?

答案1

通过这个技巧,您可以看到当前文件夹 - 但没有进度条 - 抱歉。

 watch readlink -f /proc/$(pidof find)/cwd

答案2

一个名为光伏(管道查看器)可能帮助。从精彩总结作者:Peteris Krumins:

管道查看器是一个基于终端的工具,用于监控数据通过管道的进度。

您可以通过多种方式使用 pv。在这里操作时,我将其放在管道后面,以监控 find 生成的输出的进度(应将 stdin 原封不动地传递到 stdout)

find / -mtime -1h | pv > /dev/null

它将显示类似这样的输出:

6.42MB 0:01:25 [31.7kB/s] [         <=>      ]

(我将 stdout 重定向到 /dev/null,这样我就可以看到进度条的运行情况,而不需要输出飞过。这可能不是您使用 find 的意图,因此请进行相应调整)

说实话,我不确定这在实际中效果如何。对于像上面这样的“昂贵”查找(从根目录遍历),它似乎效果很好。对于目录树中较深节点中的较简单命令,pv 失败得很惨。这些命令会立即返回结果,因此进度条在这里可能毫无意义。

无论如何,尝试一下,看看这是否能满足您的需要。至少可以作为思考的素材。

答案3

我今天搜索了这个问题,并通过 Google 找到了这里。我在 OS X 上进行了长时间的查找,但显然watch它不存在。所以这是另一个解决方案:

lsof -Fn -a -c find -d cwd +r 10

  • lsof= 打开文件列表
  • -Fn= 仅显示文件/目录的名称(以 'n' 字符为前缀,如果您希望完整lsof输出,请跳过此步骤
  • -a= 告诉lsof仅显示匹配的行全部标准(默认情况下,它显示匹配的行任何标准)
  • -c find= 显示由名为 的进程打开的文件/目录find(实际上是名称以 开头的进程find,但区分大小写,因此Finder不会显示)
  • -d cwd= 显示带有 FD(文件描述符)cwd(当前工作目录)的行
  • +r 10= 每 10 秒显示输出,直到找不到打开的文件(查找完成)

这将显示目录find每 10 秒处理一次,因此它应该可以给出一个概念,即find它是否仍在工作以及进展到什么程度。

答案4

这是当前打开的文件列表寻找,所以它和什么是一样的寻找正在“查看”。

它很轻量,只需查询文件描述符的地址即可寻找 每一秒,不要干涉寻找本身。您也可以使用任何您想要的程序来执行此操作。

# watch -n 1 'ls -l /proc/$(pidof find)/fd | cut -d ">" -f 2 | grep -v /dev/'

grep -v /dev/是为了隐藏文件 STDOUT、STDIN 和 STDERR,这些文件用于在控制台上接收和打印数据。

相关内容