Linux find 命令 - 显示进度

Vla*_*mos 29 linux find

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

Tho*_*enS 31

使用此技巧,您可以看到当前文件夹 - 但没有进度条 - 抱歉。

 watch readlink -f /proc/$(pidof find)/cwd
Run Code Online (Sandbox Code Playgroud)


小智 9

一个名为pv(管道查看器)的小工具可能会有所帮助。来自Peteris Krumins的精彩总结

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

您可以通过多种方式使用 pv。在这里玩时,我立即将它放在管道之后以监视 find 生成的输出的进度(应将 stdin 传递到 stdout 不变)

find / -mtime -1h | pv > /dev/null
Run Code Online (Sandbox Code Playgroud)

这将显示输出有点像这样:

6.42MB 0:01:25 [31.7kB/s] [         <=>      ]
Run Code Online (Sandbox Code Playgroud)

(我将 stdout 重定向到 /dev/null 以便我可以在没有输出飞过的情况下看到正在运行的进度条。这可能不是您查找的意图,因此请相应地进行调整)

老实说,我不确定这在野外效果如何。对于像上面那样的“昂贵”发现(从根遍历),它似乎工作得很好。对于目录树中更深节点中更简单的命令,pv 失败了。这些命令会立即返回结果,因此进度条在这里可能没有实际意义。

无论如何,尝试一下,看看这是否适合您的需要。至少值得深思。


Mar*_*her 7

我今天搜索了这个并通过谷歌到达这里。我在 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仍在工作以及它进行了多远。


min*_*aev 5

有一个使用findin的并行搜索示例man find。使用它,您可以对每个项目执行多次检查,根据条件工作执行多项操作。例如,第一个检查可能是 simple -print,因此所有名称都打印到标准输出。第二次检查将执行您想要的操作。就像是:

find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec ls -l {} \; \)

如果第二个检查也应该显示文件名,您可以使用-fprint /dev/stderr.