Tam*_*lei 34 command-line software-rec find utilities
是否有具有find
更传统 CLI 界面的替代程序?find
以与大多数其他实用程序截然不同的方式工作并期望参数。
澄清:我正在寻找一个程序,它具有与 find 几乎相同的功能,并且具有命令行界面,该界面的工作和感觉类似于 POSIX(或至少是 GNU)命令行建议。
Mel*_*Mel 11
这是一个普遍的误解。
查找遵循选项语法。您只是将表达式原色与选项混淆:
find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression]
[cmd][--> options <--] [--> arg0..argN <--]
Run Code Online (Sandbox Code Playgroud)
替代方法是定位。但是 find 实现了自己的表达式语法,因为它提供了一组更丰富的过滤器和操作选项。没有其他选择可以做同样的事情,只是因为它是多余的。
Kev*_*n M 11
我会看看locate
。它将查看其文件数据库并快速打印出与您提供的内容匹配的路径名。
kevin@box:~$ locate odg
/home/kevin/Documents/final.odg
/usr/share/doc/packages/sysconfig/netconfig.odg
/usr/share/gimp/2.0/help/en/gimp-tool-dodge-burn.html
....
kevin@box:~$ locate .odg
/home/kevin/Documents/final.odg
/usr/share/doc/packages/sysconfig/netconfig.odg
kevin@box:~$
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它是一个子文本匹配:如果你给它odg
,那么它将匹配 d odg e。但如果你给它.odg
,那么它不会。
但是有一个缺点:它需要一个数据库。当情况发生变化时,需要更新此数据库。不过,我的 Fedora 13 安装已将其放入每日 crontab 中。
jmt*_*mtd 10
这取决于find
您所依赖的精确功能。如果它(主要)是查找功能,则某些 shell 支持递归全局。例如,与zsh
:
% find . -name \*c
./a/b/foo.c
./a/bar.c
./baz.c
inoshiro% ls *.c
baz.c
% ls **/*.c
a/bar.c a/b/foo.c baz.c
Run Code Online (Sandbox Code Playgroud)
通过glob 限定符, Zsh 有更多类似 find 的可能性(查看man zshexpn
. 例如:
ls -l **/*(.)
? find -type f -ls
ls *(m-2u:$USER:)
? find -mtime -2 -user $USER
Bash 4 也有**/
(您需要使用 启用它shopt -s globstar
),但与 glob 限定符完全不同。
你想找到什么?如果您通常搜索源代码文件,请查看ack
. 它基本上是一个源代码搜索工具,但 ack 的-f
开关会找到匹配给定文件类型的文件。
因此,如果您想在一个目录中查找所有 Perl 文件,例如,只需:
ack -f --perl
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢 ack 识别的文件类型,您可以在~/.ackrc
.
ack 不是像 一样的通用文件查找器find
,但如果您正在使用源代码,它会非常方便。