Trudno mi znaleźć szukanie dopasowań w bieżącym katalogu, a także w jego podkatalogach.
Po uruchomieniu find *test.c
daje mi tylko dopasowania w bieżącym katalogu. (nie przegląda podkatalogów)
Gdybym spróbował find . -name *test.c
, oczekiwałbym takich samych wyników, ale zamiast tego daje mi tylko te dopasowania, które są w podkatalogu. Kiedy w katalogu roboczym są pliki, które powinny pasować, daje mi to:find: paths must precede expression: mytest.c
Co oznacza ten błąd i jak mogę uzyskać dopasowania zarówno z bieżącego katalogu, jak i jego podkatalogów?
find
od msysGit może rzucić ten błąd, chyba że otaczają wzór z cytatów:find . -name "*test.c"
. (Jeśli wolisz, aby był inny niż Windowsfind.exe
i użyj go z cmd)Odpowiedzi:
Spróbuj wpisać go w cudzysłów - napotkasz rozszerzenie wieloznaczne powłoki, więc to, co faktycznie podajesz, będzie wyglądać:
... powodując błąd składniowy. Spróbuj więc zamiast tego:
Zwróć uwagę na pojedyncze cudzysłowy wokół wyrażenia pliku - zatrzymają one rozszerzanie powłoki przez symbole wieloznaczne.
źródło
echo *test.c
... wynikiem nie będzie echo rozwinięcia symbolu wieloznacznego, ale sama powłoka. Prosta lekcja jest taka, że jeśli używasz symboli wieloznacznych, zacytuj specyfikację pliku :-)find . -type f -printf ‘%TY-%Tm-%Td %TT %p\n’
jak znaleziono w Internecie, i napotkałem „ścieżki muszą poprzedzać wyrażenie”. Problem polegał na tym, że znaki cudzysłowu były zbyt „inteligentne”. Ponownie wpisałem polecenie, powodując zamianę cytatów, i zadziałało.find
- jeśli używasz symboli wieloznacznych*.$variable
, potrzebujesz podwójnych cudzysłowów.To, co się dzieje, polega na tym, że powłoka rozwija „* test.c” do listy plików. Spróbuj uciec gwiazdkę jako:
źródło
find . -name '*txt'
Spróbuj wpisać to w cudzysłów:
źródło
Z podręcznika znajdź:
źródło
Natknąłem się na to pytanie, gdy próbowałem znaleźć wiele nazw plików, których nie mogłem połączyć w wyrażenie regularne, jak opisano w odpowiedzi @Chris J, oto, co zadziałało dla mnie
-o
lub-or
jest logiczne LUB. Aby uzyskać więcej informacji, zobacz Znajdowanie plików na Gnu.org .Uruchomiłem to na CygWin.
źródło
W moim przypadku brakowało mi
/
podążania ścieżką.źródło
/
nie jest wymagane.