我们的代码会生成大量文件,其名称包括 stdout、stdout.qsub、stderr、stderr.foo 等。
我想要做
find <dir> -name (stdout|stderr) -exec ...
并且只找到 stdout 和 stderr 文件,没有 stdout.qsub 等。
所以我不能做'-name“std *”'。在这种情况下,我可以执行 '-name "std[eo][ru][rt]"',它可以工作,因为该搜索不会找到任何 stdeut 文件。
有没有比 '-name "std[eo][ru][rt]"' 更简洁的方法吗?
或者,使用 GNU
find
:请注意,
-regex
与整个路径匹配,更像是-path
,-name
并且正则表达式被锚定,就好像^
在开始和$
结束时有一个隐式。另请注意,由于.*
匹配任何字符序列,它不会在路径无法解码为语言环境中的字符的目录中找到stdout
/文件。stderr
$dir
还要注意,如果以谓词名称开头-
或恰好匹配谓词名称,它将失败find
。使用 BSD
find
,您可以:上面,
"$dir"
是作为参数传递给选项的,因此以 .开头的-f
值没有歧义,也没有问题。启用扩展的正则表达式,如 for或.$dir
-
-E
grep
sed