Preciso corresponder os resultados de find
com regexp. Os arquivos são como:
/path/1/file1.001.txt
/path/1/file2.001.txt
/path/1/file1.001
/path/2/file3.002.txt
/path/2/pure_file3.002.txt
etc.
Eu preciso corresponder todos os arquivos de todos os diretórios terminados em xxx.txt
, em que xxx
tem três dígitos e apenas os nomes de arquivos que não são precedidos pela palavra pure_
. Além disso, preciso retornar o caminho completo.
Eu tenho todos trabalhando, exceto excluindo os arquivos precedidos por pure_
:
find /path/ -mindepth 1 -maxdepth 2 -type f | grep -P '.*\.[0-9]{3}.txt'
Eu tentei:
find /path/ -mindepth 1 -maxdepth 2 -type f | grep -P '.+(?!pure).*\.[0-9]{3}.txt'
mas se eu disser /path/1/
:
ls -1 | grep -P '^(?!pure).*\.[0-9]{3}.txt'
que exclui corretamente esses arquivos, por outro lado:
ls -1 | grep -P '(?!pure).*\.[0-9]{3}.txt'
não.
Então, provavelmente, resume-se a como corresponder em um caminho completo um nome de base que não comece com pure_
. Minha compreensão de expressões regulares é insuficiente para isso, pode ter algo a ver com a atomicidade de olhar ao redor que eu nunca entendi.