Chciałbym wyszukać pliki, które nie pasują do 2 -name
warunków. Mogę to zrobić tak:
find /media/d/ -type f -size +50M ! -name "*deb" ! -name "*vmdk"
i to da właściwy wynik, ale czy mogę jakoś połączyć te 2 warunki z LUB?
Możesz to zrobić również przy użyciu negacji -regex
: -
find ./ ! -regex '.*\(deb\|vmdk\)$'
-regex
jest mniej przenośny niż-name
.tak, możesz:
Objaśnienie ze specyfikacji POSIX :
Zauważ, że nawiasy otwierające i zamykające są poprzedzone odwrotnym ukośnikiem (
\
), aby zapobiec ocenie przez powłokę.źródło
-exec
inne czynności nafind
wynikach, pamiętaj o nawiasowaniu\( \)
całych kryteriów, w przeciwnym razie-exec
będzie miało zastosowanie tylko do ostatniego-or
kryterium. Aby pracować nad wszystkimi, nawiasuj je:find \( <criterion> -o <criterion> \) -exec <command>
Jesteś blisko rozwiązania:
Możesz łączyć następujące operatory logiczne w dowolnej kolejności:
źródło
Możesz używać wyrażeń regularnych jak w:
Odwrotny ukośnik jest znakiem ucieczki;
.
dopasowuje pojedynczy znak i*
służy do dopasowania poprzedniego znaku zero lub więcej razy, więc.*
oznacza dopasowanie zero lub więcej znaków.źródło