Posso obter todas as jpg imagens usando:

find . -name "*.jpg" 

Mas como posso adicionar png arquivos aos resultados também?

Comentários

Resposta

Use o sinalizador -o entre parâmetros diferentes.

find ./ -type f \( -iname \*.jpg -o -iname \*.png \) funciona perfeitamente.

NOTA Deve haver um espaço entre o colchete e seu conteúdo ou não funcionará.

Explicação:

  • -type f – pesquise apenas arquivos (não diretórios)
  • \( & \) – são necessários para que -type f se apliquem a todos os argumentos
  • -o – OU lógico operador
  • -iname – como -name, mas a correspondência não diferencia maiúsculas de minúsculas

Comentários

  • Você precisa dos parênteses? O comando funciona para mim sem eles. Eles são necessários para alguns shells?
  • @miked O comando " funcionará " sem eles, sim, mas você ' d acaba obtendo acessos em diretórios que terminam em .png, bem como em arquivos que terminam em .jpg, o que não é exatamente o que se pretendia.
  • Agradeço por ter esclarecido! O type -f não se estende nem se aplica a ambas as expressões sem os parênteses. Portanto, find ./ -type f -iname \*.jpg -o -type f -iname \*.png também funciona … embora ' s dois caracteres a mais 🙂
  • É ' uma questão de precedência do operador. Assim como a * b + c é diferente de a * (b + c)
  • @jdhao Boa captura, corrigida.

Resposta

Você pode combinar critérios com -o como sugerido por Shadur . Observe que -o tem precedência menor do que a justaposição, então você pode precisar de parênteses.

find . -name "*.jpg" -o -name "*.png" find . -mtime -7 \( "*.jpg" -o -name "*.png" \) # all .jpg or .png images modified in the past week 

No Linux, você pode use -regex para combinar extensões de uma maneira mais concisa. A sintaxe padrão do regexp é Emacs ( regexps básicos mais algumas extensões como \| para alternância); existe uma opção para mudar para expressões regulares estendidas .

find -regex ".*\.\(jpg\|png\)" find -regextype posix-extended -regex ".*\.(jpg|png)" 

No FreeBSD, NetBSD e OSX, você pode usar -regex combinado com -E para expressões regulares estendidas.

find -E . -regex ".*\.(jpg|png)" 

Comentários

  • É ' é sempre melhor usar -iname em vez de -name – então você também irá capturar image.JPG e image.PnG

Resposta

Isso é mais correto:

find . -iregex ".*\.\(jpg\|gif\|png\|jpeg\)$" 

Comentários

  • Por que você diz que é " mais " correto?
  • @Kevin Acho que porque -iregex corresponde a jpg e também a JPG Jpg jpG e tal. Acho que $ não ' é necessário .
  • Isso funciona bem em MinGW .
  • Primeiro, você omitiu a pasta de pesquisa como primeiro argumento que lançará um erro. Em segundo lugar, no OSX, o escape do parêntese não funcionará e deve ser usado: find -E . -iregex '.*\.(jpg|png|gif)' como mostrado na resposta de @sorin '.

Resposta

Para deixar claro, a única opção que funciona no tipo Linux, Unix e macOS é:

find -E . -regex ".*\.(jpg|png)" 

Isso ocorre porque a versão do OS X é um pouco diferente, mas é importante escrever coisas que vão bem na maioria das plataformas.

Comentários

  • O sinalizador -E não é válido para localização no Ubuntu 14.04
  • O sinalizador -E não é válido em MinGW (pelo menos a versão / configuração que experimentei (configuração padrão para uma versão específica)).
  • Qual parte de -type f \( -iname \*.png -o -iname \*.jpg\) não funciona em OSX?
  • Pode confirmar que -type f \( -iname \*.png -o -iname \*.jpg\) funciona em OSX

Resposta

/\.(jpe?g|png|gif|bmp)$/i; 

Use.

Comentário s

  • Você pode precisar explicar isso um pouco.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *