我想知道在 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,这些文件用于在控制台上接收和打印数据。