2013-04-10 18 views
10

jestem w katalogu „Dom” i uruchomić to polecenieznalezisko nie znajdzie rekurencyjnie

find . -iname *.mov 

i produkuje

./root/movies/Corey/holtorf/Intro.mov 

Teraz „cd ..” i uruchomić to samo polecenie

find . -iname *.mov 

Tym razem "Intro.mov" nie jest w wyniku. Jakie są tego przyczyny? Co to jest polecenie wyszukiwania rekurencyjnie dla każdego pliku kończącego się ".mov" w bieżącym katalogu? Dzięki.

Odpowiedz

20

Podczas używania symbolu wieloznacznego w argumencie jest on rozszerzany przez powłokę. Aby temu zapobiec, musisz napisać "* .mov".

W twoim przypadku powłoka rozszerza się do plików, które znajdzie , zanim przekazuje argument do znalezienia, który następnie pobiera listę plików i nie będzie szukał w oparciu o oryginalny wzorzec.

16

Może być konieczne dodanie -follow, jeśli katalog domowy jest w rzeczywistości dowiązaniem symbolicznym. Podaj także wzorzec, w przeciwnym razie powłoka spróbuje go rozwinąć przed przekazaniem go do find.

4

Nie mogę jeszcze komentować, więc opublikuję to jako odpowiedź (z góry przepraszam).

Proszę sprawdzić ten post "find: paths must precede expression:" How do I specify a recursive search that also finds files in the current directory?

oraz dodatkowe informacje, które mogą Ci pomóc: rekursywnie znaleźć plik o określonej nazwie w bieżącym katalogu, można użyć grep lub znaleźć

grep -r "*.mov" . 

lub bez uwzględniania wielkości liter wyszukiwania

grep -ri "*.mov" . 

i znaleźć

find . -type f -exec grep -l "*.mov" {} + 

bardzo przydatny link http://www.cyberciti.biz/faq/howto-recursively-search-all-files-for-words/

1

użyłbym:

grep -rn 'mov' . 

rekurencyjne wyszukiwania numeryczny

Powiązane problemy