我想知道在 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 失败了。这些命令会立即返回结果,因此进度条在这里可能没有实际意义。
无论如何,尝试一下,看看这是否适合您的需要。至少值得深思。
我今天搜索了这个并通过谷歌到达这里。我在 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
in的并行搜索示例man find
。使用它,您可以对每个项目执行多次检查,根据条件工作执行多项操作。例如,第一个检查可能是 simple -print
,因此所有名称都打印到标准输出。第二次检查将执行您想要的操作。就像是:
find /work \( -fprint /dev/stderr \) , \( -name 'core' -exec ls -l {} \; \)
如果第二个检查也应该显示文件名,您可以使用-fprint /dev/stderr
.
归档时间: |
|
查看次数: |
16546 次 |
最近记录: |