find utilitário não reconhece a notação de colchetes

3

Eu tenho dois arquivos na pasta atual:

submitWeb.m
submit.m

o seguinte find não mostra os dois arquivos:

find . -regex .*submit\(Web\)?\.m

Mas a expressão regex acima funciona bem no buffer do emacs, ou seja, procure pelas strings de exemplo no buffer do emacs usando isearch-forward-regexp .

O padrão regextype para find é emacs .

Mas parece que find considera \( como um colchete esquerdo no nome do arquivo, o que difere da sintaxe de regex do emacs.

Então, isso é um bug ou meu mal-entendido de find manpage?

    
por gongzhitaao 26.05.2013 / 02:32

1 resposta

5

Parece que o problema é \( é interpretado pela shell primeiro.

Por exemplo, você tem um arquivo no diretório atual chamado:

foo(.test

Então

ls foo\(.text

e

ls "foo(.text"

ambos funcionam.

Então, os seguintes trabalhos:

find . -regex ".*submit\(Web\)?\.m"

EDITAR :

Aspas simples também funcionam aqui.

Diferença entre aspas simples e aspas duplas, consulte esta postagem: single citação vs citação dupla na bash

    
por 26.05.2013 / 02:41