考虑以下 shell 会话:
$ mkdir /tmp/a ; mkdir /tmp/b
$ find /tmp -regex '[a-z]'
$ find /tmp -regex '/tmp/[a-z]'
/tmp/a
/tmp/b
$
该find
实用程序匹配它找到的每个文件的 _full 路径名,即使基本目录在找到的所有文件之间共享。
我可以以某种方式避免这种情况,以支持相对路径吗?或者我必须始终在目录名称或“.*”前面添加才能找到我的文件吗?
考虑以下 shell 会话:
$ mkdir /tmp/a ; mkdir /tmp/b
$ find /tmp -regex '[a-z]'
$ find /tmp -regex '/tmp/[a-z]'
/tmp/a
/tmp/b
$
该find
实用程序匹配它找到的每个文件的 _full 路径名,即使基本目录在找到的所有文件之间共享。
我可以以某种方式避免这种情况,以支持相对路径吗?或者我必须始终在目录名称或“.*”前面添加才能找到我的文件吗?
这就是-regex
设计的工作方式。以下是手册页中的详细信息find
:
-regex pattern
File name matches regular expression pattern. This is a match
on the whole path, not a search. For example, to match a file
named `./fubar3', you can use the regular expression `.*bar.' or
`.*b.*3', but not `f.*r3'. The regular expressions understood
by find are by default Emacs Regular Expressions, but this can
be changed with the -regextype option.
根据您的正则表达式的复杂性,您可以使用它,-name
因为它支持括号表达式,就像在bash
(在 Linux 上,请参阅参考资料glob(7)
)中的 glob 模式匹配一样:
$ ls /tmp
a ac b ca
$ find /tmp -name '[a-z]'
/tmp/a
/tmp/b
$
作为一种解决方法,您可以cd
先访问目录,但您仍然需要./
处理前缀。
$ cd /tmp
$ find . -regex '\./[a-z]'
./a
./b
$ find . -regex '..[a-z]'
./a
./b
$