Eu tenho algumas imagens nomeadas com a string uuid1 gerada. Por exemplo 81397018-b84a-11e0-9d2a-001b77dc0bed.jpg. Quero descobrir todas essas imagens usando o comando "find":
find . -regex "[a-f0-9\-]\{36\}\.jpg".
Mas isso não funciona. Algo errado com a regex? Alguém poderia me ajudar com isso?
Respostas:
Observe que você precisa especificar
.*/
no início porquefind
corresponde ao caminho inteiro.Exemplo:
Minha versão do find:
fonte
"^ ... $"
torno do regex. Ele deve corresponder à linha de resultado INTEIRA./
em.*/
causa.*
corresponde a zero ou mais de (quase) qualquer personagem.\{36\}
valid types are 'findutils-default', 'awk', ' egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix -extended', 'posix-minimal-basic', 'sed'.
-regextype
bandeira antes da-regex
bandeira, caso contrário ela não se aplica!A
-regex
expressão find corresponde ao nome inteiro , incluindo o caminho relativo do diretório atual. Parafind .
isso sempre começa com./
, em seguida, quaisquer diretórios.Além disso, essas são
emacs
expressões regulares, que possuem outras regras de escape além das expressões regulares usuais do egrep.Se todos estiverem diretamente no diretório atual,
Deveria trabalhar. (Não tenho muita certeza - não posso fazer com que a repetição contada funcione aqui.) Você pode alternar para expressões egrep
-regextype posix-egrep
:(Observe que tudo o que foi dito aqui é para encontrar o GNU, não sei nada sobre o BSD, que também é o padrão no Mac.)
fonte
posix-egrep
tipo funcionou para mim.-regextype
é uma opção para o GNUfind
e não para o BSD (pelo menos não para o Mac BSD)find
. Se esta opção não estiver disponível, instale o GNU find. Se em um Mac, isso é possível com o pacote de preparaçãofindutils
. Localizar fica disponível viagfind
.A julgar por outras respostas, parece que isso pode ser culpa do achado.
No entanto, você pode fazer desta maneira:
find . * | grep -P "[a-f0-9\-]{36}\.jpg"
Talvez você precise ajustar um pouco o grep e usar opções diferentes, dependendo do que você deseja, mas ele funciona.
fonte
find
's-prune
funcionalidade que irá saltar sobre certos diretórios completamente. Na maioria das vezes isso não é realmente importante, mas vale a pena mencionar.no Mac OS X (localização BSD) : igual à resposta aceita, o
.*/
prefixo é necessário para corresponder a um caminho completo:man find
diz que-E
usa suporte estendido a regexfonte
-E
não está disponível no Ubuntu (testado no WSL Ubuntu)Tente usar aspas simples (') para evitar que o shell escape da sua string. Lembre-se de que a expressão precisa corresponder a todo o caminho, ou seja, precisa se parecer com:
Além disso, parece que meu achado (GNU 4.4.2) conhece apenas expressões regulares básicas, especialmente a sintaxe {36}. Eu acho que você terá que se contentar sem isso.
fonte
Maneira simples - você pode especificar. * No início porque find corresponde a todo o caminho.
encontrar versão
fonte
Você deve usar o caminho absoluto do diretório ao aplicar a instrução find com expressão regular. No seu exemplo, o
deve ser alterado para
Na maioria dos sistemas Linux, algumas disciplinas de expressão regular não podem ser reconhecidas por esse sistema; portanto, você deve indicar explicitamente
fonte