Nie działa dla mnie na Macu, ale działa z opcją -E (rozszerzona) (może potok jest rozszerzoną funkcją?): Znajdź -E / path / to -iregex ". * \. (Jpg | gif | png | jpeg) "> log
@ Gerald: Prawdopodobnie musisz pogrupować wyrażenie OR w nawiasach, które find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;nie mają znaczenia : w przeciwnym razie exec ma zastosowanie tylko do ostatniej części ( -iname '*.jpg' w tym przypadku).
Hmmm -Eopcja mówi findo użyciu „rozszerzonych wyrażeń regularnych”. Kilka innych narzędzi ma podobną opcję, ale nie jestem pewien, czy ta opcja jest dostępna we wszystkich dystrybucjach UNIX.
Czy możesz wyjaśnić, dlaczego dodałeś (ucieczkowe) nawiasy wokół parametrów nazwa / nazwa?
Bart Kleijngeld,
Czy jest jakiś powód niespójności? -iname *.jpg, -o -name *.jpeg, -o -iname *gifMają nieco inny format.
Opuszczony
jeśli potrafisz przynajmniej wyjaśnić różnice innymi odpowiedziami.
el-teedee
6
Oprócz powyższej odpowiedzi @Dennis Williamson, jeśli chcesz, aby ten sam wyrażenie regularne nie rozróżniało wielkości liter w rozszerzeniach plików, użyj opcji -iregex:
będzie działać. Może być bardziej elegancki sposób.
źródło
find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -exec ls -l {} \;
nie mają znaczenia : w przeciwnym razie exec ma zastosowanie tylko do ostatniej części (-iname '*.jpg'
w tym przypadku).find /path/to/ -iname '*.gif' -o -iname '*.jpg' -print0
wydrukuje tylko pliki jpg! Potrzebujesz nawiasów tutaj:find /path/to/ \( -iname '*.gif' -o -iname '*.jpg' \) -print0
find -E /path/to -regex ".*\.(jpg|gif|png|jpeg)" > log
-E
Pozwala uniknąć konieczności ucieczki parens i rur w Twojej regex.źródło
-E
opcja mówifind
o użyciu „rozszerzonych wyrażeń regularnych”. Kilka innych narzędzi ma podobną opcję, ale nie jestem pewien, czy ta opcja jest dostępna we wszystkich dystrybucjach UNIX.find . -regextype posix-extended -regex ".*\.(jpg|gif|png|jpeg)"
.find -E /path/to -iregex ".*\.(jpg|gif|png|jpeg)" > log
. Użycie-iregex
flagi informuje,find
że wielkość liter nie ma znaczenia.Używa tego
file
polecenia, aby spróbować rozpoznać typ pliku, niezależnie od nazwy pliku (lub rozszerzenia).Jeśli
/path/to
lub nazwa pliku zawiera ciągimage
, powyższe może zwrócić fałszywe trafienia. W takim razie sugerowałbymźródło
źródło
-iname *.jpg
,-o -name *.jpeg
,-o -iname *gif
Mają nieco inny format.Oprócz powyższej odpowiedzi @Dennis Williamson, jeśli chcesz, aby ten sam wyrażenie regularne nie rozróżniało wielkości liter w rozszerzeniach plików, użyj opcji -iregex:
źródło
W systemie Mac OS
źródło
źródło
w przypadku, gdy pliki nie mają rozszerzenia, możemy poszukać typu MIME pliku
gdzie (audio | wideo | matroska | mpeg) są wyrażeniami regularnymi typu MIME
a jeśli chcesz je usunąć:
lub usuń wszystko inne oprócz tych rozszerzeń:
zwróć uwagę na! ~ zamiast ~
źródło