替代寻找?

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 实现了自己的表达式语法,因为它提供了一组更丰富的过滤器和操作选项。没有其他选择可以做同样的事情,只是因为它是多余的。

  • 即使是我的错,这也不能回答我的问题。 (6认同)
  • OP 断言`find`“以与大多数其他实用程序截然不同的方式期望参数”。您声明 OP 是“将表达式原色与选项混淆”。大多数其他实用程序甚至有“表达原色”的概念吗?如果没有,那不是*证明* OP的观点吗?这真的不是使用 `find` 最奇怪的部分。还有哪些 CLI 涉及 `{}`(当然必须以某种方式转义)? (3认同)

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 限定符完全不同。


And*_*ter 6

你想找到什么?如果您通常搜索源代码文件,请查看ack. 它基本上是一个源代码搜索工具,但 ack 的-f开关会找到匹配给定文件类型的文件。

因此,如果您想在一个目录中查找所有 Perl 文件,例如,只需:

ack -f --perl
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢 ack 识别的文件类型,您可以在~/.ackrc.

ack 不是像 一样的通用文件查找器find,但如果您正在使用源代码,它会非常方便。