我想知道在使用linux搜索文件时是否有任何方式显示某种进度信息find
。我经常发现自己搜索文件的一个大磁盘上,某种进度指示器将是非常有益的,像酒吧,或者至少当前目录中的“查找”搜索。有没有做任何脚本,或者不find
支持一些挂钩?
我想知道在使用linux搜索文件时是否有任何方式显示某种进度信息find
。我经常发现自己搜索文件的一个大磁盘上,某种进度指示器将是非常有益的,像酒吧,或者至少当前目录中的“查找”搜索。有没有做任何脚本,或者不find
支持一些挂钩?
Answers:
使用此技巧,您可以看到当前文件夹-但没有进度栏-抱歉。
watch readlink -f /proc/$(pidof find)/cwd
一个叫做pv(管道查看器)的小实用程序可能会有所帮助。从Peteris Krumins 的精彩总结中:
管道查看器是基于终端的工具,用于监视通过管道的数据进度。
您可以通过多种方式使用pv。在这里玩耍时,我将其放在管道之后,以监视find生成的输出的进度(应将stdin传递给stdout保持原状)
find / -mtime -1h | pv > /dev/null
它将显示如下输出:
6.42MB 0:01:25 [31.7kB/s] [ <=> ]
(我将stdout重定向到/ dev / null,所以我可以看到进度条正在运行而没有输出飞散。这可能不是您的查找意图,因此请相应地进行调整)
老实说,我不确定这在野外的效果如何。对于像上面这样的“昂贵”发现(从根开始遍历),它似乎工作得很好。对于目录树中更深层节点中的更简单命令,pv惨败。这些命令将立即返回结果,因此此处可能没有进度条。
无论如何,试一下,看看它是否完全可以满足您的需求。至少值得深思。
find
,也不pv
知道搜索需要多久,,所以不能计算出百分比。我们在pv
输出中看到的就是自开始搜索以来的时间。
yes | pv > /dev/null
观察
我今天进行了搜索,并通过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
仍在工作以及进度如何。
这是由find打开的当前文件的列表,因此与find正在“立即” 查找的文件相同。
它轻巧,只是find 每秒使用的文件描述的查询地址,不会干扰find本身。您也可以使用任何所需的程序来执行此操作。
# watch -n 1 'ls -l /proc/$(pidof find)/fd | cut -d ">" -f 2 | grep -v /dev/'
该grep -v /dev/
是隐藏文件STDOUT,STDIN和STDERR,这是用于接收和您的控制台上显示的数据文件。