Temos um código que gera um grande número de arquivos com nomes como stdout, stdout.qsub, stderr, stderr.foo, etc.
eu gostaria de fazer
find <dir> -name (stdout|stderr) -exec ...
e encontre apenas arquivos stdout e stderr, sem stdout.qsub, etc.
Então eu não posso fazer '-name "std*"'. Nesse caso, posso fazer '-name "std[eo][ru][rt]"' e funciona porque não haverá nenhum arquivo stdeut a ser encontrado por essa pesquisa.
Existe uma maneira mais limpa de fazer isso do que '-name "std[eo][ru][rt]"'?
Ou, com GNU
find
:Apenas observe que
-regex
corresponde a todo o caminho, mais parecido com-path
than-name
e o regexp é ancorado como se houvesse um implícito^
no início e$
no final. Observe também que, como.*
corresponde a qualquer sequência de caracteres , ele não encontrarástdout
/stderr
arquivos em diretórios cujo caminho não possa ser decodificado como caracteres na localidade.Também tome cuidado, pois ele falhará se
$dir
começar com-
ou coincidir com o nome de umfind
predicado.Com BSD
find
, você pode fazer:Acima, o
"$dir"
é passado como um argumento para a-f
opção, então não há ambiguidade e nenhum problema com valores$dir
começando com-
.-E
habilita regexps estendidas como forgrep
oused
.