Próbuję znaleźć pliki z określonymi rozszerzeniami. Na przykład chcę znaleźć wszystkie pliki .pdf i .jpg o nazwie Robert
Wiem, że mogę wykonać to polecenie
$ find . -name '*.h' -o -name '*.cpp'
ale muszę podać nazwę samego pliku oprócz rozszerzeń. Chcę tylko sprawdzić, czy istnieje sposób, aby uniknąć ciągłego wpisywania nazwy pliku. Dziękuję!
iname
zamiast niego - co jest bez rozróżniania wielkości liter .iname
czyname
zależy od tego, co chcesz znaleźć. Byłem w sytuacjach, w których sprawa była niezbędna.Odpowiedzi:
Moja preferencja:
find . -name '*.jpg' -o -name '*.png' -print | grep Robert
źródło
find -exec ...
jpg
lubpng
jako część dłuższej ścieżki.Korzystanie
find
„s-regex
argumentu:find . -regex '.*/Robert\.\(h\|cpp\)$'
Lub po prostu używając
-name
:find . -name 'Robert.*' -a \( -name '*.cpp' -o -name '*.h' \)
źródło
find -name "*Robert*" \( -name "*.pdf" -o -name "*.jpg" \)
-o
Repreents oOR
kondycję i można dodać tyle, ile chcesz w nawiasach. Oznacza to, że wszystkie pliki zawierające słowo „Robert” w dowolnym miejscu w ich nazwach i których nazwy kończą się na „pdf” lub „jpg”.źródło
Jako alternatywa dla korzystania z
-regex
opcji onfind
, ponieważ pytanie jest oznaczonegrzmotnąć, możesz użyć mechanizmu rozwijania nawiasów:eval find . -false "-o -name Robert".{jpg,pdf}
źródło
eval
albo.
w powyższym poleceniu, albo jesteśfind
aliasem do czegoś bardziej skomplikowanego, albo nie używasz podstawowego GNUfind
w swojej wersji Linuksa.find
nie obsługuje-false
. Pracowałem wokół to poprzez podanie dwóch wzajemnie ekskluzywne warunki są więc wspólnie fałszywa-inum 1 -inum 2
.To pytanie / odpowiedź pokazuje, jak używać find z wyrażeniem regularnym: Jak używać wyrażenia regularnego z poleceniem find?
Wzór mógłby być podobny
'^Robert\\.\\(h|cgg\\)$'
źródło
Jako skrypt możesz użyć:
find "${2:-.}" -iregex ".*${1:-Robert}\.\(h\|cpp\)$" -print
findcc
i używaj go jako
na przykład
findcc # default name 'Robert' and directory . findcc Joe # default directory '.' findcc Joe /somewhere # no defaults
Zauważ, że nie możesz użyć
findcc /some/where #eg without the name...
również jako alternatywę możesz użyć
find "$1" -print | grep "$@"
i
lubić
findcc . -P '/Robert\.(h|cpp)$'
źródło
Używanie bash globbing (jeśli
find
nie jest konieczne)źródło
Powtarzalnie z ls: (-al dla dołączania ukrytych folderów)
ftype="jpg" ls -1R *.${ftype} 2> /dev/null
źródło