-1

考虑以下 shell 会话:

$ mkdir /tmp/a ; mkdir /tmp/b
$ find /tmp -regex '[a-z]'
$ find /tmp -regex '/tmp/[a-z]'
/tmp/a
/tmp/b
$

find实用程序匹配它找到的每个文件的 _full 路径名,即使基本目录在找到的所有文件之间共享。

我可以以某种方式避免这种情况,以支持相对路径吗?或者我必须始终在目录名称或“.*”前面添加才能找到我的文件吗?

4

1 回答 1

1

这就是-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
$ 
于 2020-03-31T13:59:20.470 回答