Preciso encontrar todos os arquivos de imagem do diretório (gif, png, jpg, jpeg).
find /path/to/ -name "*.jpg" > log
Como modificar essa seqüência de caracteres para encontrar não apenas arquivos .jpg?
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log
vai funcionar. Pode haver uma maneira mais elegante.
fonte
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
caso contrário, o exec se aplica apenas à última parte (-iname '*.jpg'
neste caso).find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
imprimirá apenas os arquivos jpg! Você precisa de colchetes aqui:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
A
-E
poupa de ter que escapar os parênteses e tubos em seu regex.fonte
-E
opção dizfind
para usar "expressões regulares estendidas". Várias outras ferramentas têm uma opção semelhante, mas não tenho certeza se esta opção está disponível em todas as distribuições UNIX.find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. O uso da-iregex
bandeira informafind
para corresponder maiúsculas de minúsculas.Isso usa o
file
comando para tentar reconhecer o tipo de arquivo, independentemente do nome do arquivo (ou extensão).Se
/path/to
ou um nome de arquivo contiver a stringimage
, o item acima pode retornar resultados falsos. Nesse caso, eu sugirofonte
fonte
-iname *.jpg
,-o -name *.jpeg
,-o -iname *gif
Todos têm um formato ligeiramente diferente.Em complemento à resposta de @Dennis Williamson acima, se você deseja que o mesmo regex não diferencie maiúsculas de minúsculas das extensões de arquivo, use -iregex:
fonte
No Mac OS, use
fonte
fonte
caso os arquivos não tenham extensão, podemos procurar o tipo mime
onde (audio | video | matroska | mpeg) são tipos mime regex
e se você quiser excluí-los:
ou exclua tudo, menos essas extensões:
observe o! ~ em vez de ~
fonte