Linuxfind命令 – 显示进度

我想知道是否有任何方式来显示某些types的进展信息,当在Linuxsearch文件使用find 。 我经常发现自己在一个大磁盘上search文件,某种进度指示器会非常有帮助,就像一个栏或者至less当前目录“find”在里面search。是否有任何脚本可以这样做,或者是否find支持挂钩?

用这个技巧,你可以看到当前的文件夹 – 但没有进度条 – 对不起。

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

一个叫pv (pipe道查看器)的小工具可能会有所帮助。 从Peteris Krumins的精彩总结 :

pipe道查看器是一个基于terminal的工具,用于通过pipe道监视数据的进度。

您可以通过多种方式使用pv。 在这里玩耍的时候,我把它放在一个pipe道后面,以监控find生成的输出的进度(应该把stdin改为stdout)

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

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

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

(我把stdoutredirect到了/ dev / null,这样我就可以看到进度条没有输出,这可能不是你用find的意图,所以要相应地调整)

我真的不知道这是如何在野外工作。 对于像上面那样的“昂贵”的发现(从根本上来说),它看起来工作得很好。 对于目录树中更深层节点中的简单命令,pv失败了。 这些命令立即返回结果,所以进度条可能在这里。

无论如何,玩一下,看看这是否可以满足你的需求。 至less是思考的食物。

有一个与man find平行search的例子。 使用它,您可以对每个项目执行多个检查,根据哪个条件执行多个操作。 第一个检查可能是,例如,简单的-print ,所以所有的名字打印到标准输出。 第二次检查将做你想要的。 就像是:

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

如果第二个检查也应该显示文件名,您可以使用-fprint /dev/stderr将其中一个redirect到-fprint /dev/stderr

我今天search了这个,通过Google来到这里。 我有一个长期运行在OS X上运行,显然, watch不存在那里。 所以这是另一个解决scheme:

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

  • lsof =打开的文件列表
  • -Fn =只显示文件/目录的名称(前缀为'n'字符,如果你喜欢完整的lsof输出
  • -a =告诉lsof只显示符合所有条件的行(默认情况下显示符合任何条件的行)
  • -c find =显示由名为find的进程打开的文件/目录(实际上,名称以find开头的进程,但区分大小写,所以Finder不会显示)
  • -d cwd =显示FD(filedescriptor)行cwd(当前工作目录)
  • +r 10 =每10秒显示输出,直到找不到打开的文件(查找完成)

这将显示目录find处理每10秒,所以它应该给出一个想法,如果find仍然工作,并有多远进展。

AFAIK,它没有,执行它将是非常平凡的。

…嗯。 也许一个脚本首先find <target dir> -type d ,存储列表,然后在for循环中运行find <list item> -maxdepth 1 <rest of find parameters>之前回显每个dir。

请注意,您正在交易显着/损失的performance,以便能够隐约看到它在做什么。