2

有人可以告诉我我是如何滥用 find 的吗?

我想在以 .config 结尾的目录中查找所有文件。

$:~/esrc$ find . -type f
./t.config
./util/ebin/config.beam
./util/ebin/gen_spec.beam
./util/etc/util.config
./util/etc/v.config
./util/src/config.erl
./util/src/gen_spec.erl
./util/src/v.config
./util/u.config

我的第一个想法是使用 find 。-type f -name *.config

不幸的是,这只是在根目录中找到一个文件。

$:~/esrc$ find . -type f -name *.config
./t.config

相同的命令确实可以找到所有 *.erl 文件...

$:~/esrc$ find . -type f -name *.erl
./util/src/config.erl
./util/src/gen_spec.erl

任何线索为什么这适用于 *.erl 但不适用于 *.config?

谢谢。

4

2 回答 2

4

引用通配符,即

find . -type f -name '*.config'
于 2013-10-06T21:45:47.557 回答
1

这里的混淆是通配符(* 字符)在进入 find 命令之前shell解释。 要解决该问题,您需要逃避它:

find . -type f -name \*.config

通过使用 \ 转义 *,shell 会将 * 传递给 find 命令。

例如,如果您foo.config在当前目录中有一个名为的文件,shell 会将通配符扩展为 foo.config 并将其传递给 find,因此从 find 命令的角度来看,生成的命令将是:

find . -type f -name foo.config
于 2013-10-06T22:07:40.547 回答