2010-04-12 6 views

Odpowiedz

118
find /path/to -regex ".*\.\(jpg\|gif\|png\|jpeg\)" > log 
+5

Nie działa dla mnie na Macu, ale działa z opcją -E (rozszerzoną) (może rura jest rozszerzoną funkcją?): Znajdź -E/path/do -gegex ". * \. (Jpg | gif | png | jpeg)"> log – ling

96
find /path/to/ -iname '*.gif' -o -iname '*.jpg' -o -iname '*.png' -o -iname '*.jpeg' 

będzie działać. Może być bardziej elegancki sposób.

+14

-w przypadku nie będzie uwzględniana wielkość liter –

+0

'exec' nie działa w ten sposób. – Gerald

5
find /path -type f \(-iname "*.jpg" -o -name "*.jpeg" -o -iname "*gif" \) 
+1

Czy możesz wyjaśnić, dlaczego dodałeś nawias (escaped) do parametrów name/iname? –

+0

Jeśli dołączysz polecenie usuwania - wtedy będzie to miało sens. – johndpope

10
find /path/to/ -type f -print0 | xargs -0 file | grep -i image 

używa komendy file spróbować rozpoznać typ pliku, niezależnie od nazwy pliku (lub przedłużenia).

Jeśli lub nazwa pliku zawiera ciąg , powyższe może zwrócić fałszywe trafienia. W takim przypadku sugeruję

cd /path/to 
find . -type f -print0 | xargs -0 file --mime-type | grep -i image/ 
+0

Przepraszam, miałem błędne kliknięcie i najwyraźniej nie mogę cofnąć downwote ... :( –

17

find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log

-E pozwala uniknąć konieczności ucieczki parens i rur w Twojej regex.

+1

moje znalezisko nie ma tego -E – wieczorek1990

+0

Hmmm opcja '-E' mówi' "Użyj rozszerzonych wyrażeń regularnych" Kilka innych narzędzi ma podobną opcję, ale nie jestem pewien, czy ta opcja jest dostępna we wszystkich dystrybucjach systemu UNIX – tboyce12

+5

Działa również na Mac OS: –

6

W suplemencie do odpowiedzi @Dennis Williamson „s powyżej, jeśli chcesz tego samego regex być rozróżniana wielkość liter z rozszerzeniami plików, użyj -iregex:

find /path/to -iregex ".*\.\(jpg\|gif\|png\|jpeg\)" > log 
0

na Mac OS użyć

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