Przeszukujesz komputer Mac przez terminal?


22

czy są jakieś polecenia do wyszukiwania na komputerze Mac za pomocą terminala? Próbowałem użyć grep do wyszukiwania, ale wydaje się to trochę nie reagować i nic się nie pojawia.

Na przykład wpisałbym „grep Files” (nazwa folderu), po prostu drukuje pustą linię i nic się nie dzieje.



Jestem zainteresowany wyszukiwaniem wszystkich typów plików; Niekoniecznie wykluczając pliki tekstowe, ale nie tylko pliki tekstowe.
JFW

Odpowiedzi:


21

Możesz także użyć tego mdfindpolecenia, aby przeprowadzić wyszukiwanie za pomocą Spotlight. Więcej informacji tutaj .

Służy mdfind -name searchtermdo pobierania plików o nazwie searchterm. Służy mdfind searchtermdo wyszukiwania nazwy i zawartości pliku.


25

Jeśli chcesz tylko znaleźć pliki o określonej nazwie, użyj find

Stronę podręcznika można znaleźć TUTAJ lub pisząc man findw wierszu polecenia terminalu.

Zasadniczo find będzie rekurencyjnie szukał pliku spełniającego określone kryteria. Najłatwiejszy przykład:

find . -name file_name -print

Spowoduje to wyszukanie pliku o nazwie „nazwa_pliku” rozpoczynającego się w bieżącym katalogu i wyszukiwania poniżej i wydrukującego pliki o tej nazwie.

find ~ -name ".DS_Store" -delete

To znajdzie wszystkie pliki .DS_Store i je usunie.

Możesz wyszukiwać według nazwy, wyrażenia regularnego, daty. Możesz działać na pliku w dowolny sposób uniksowy z -execpredykatem.

Możesz także użyć polecenia find jako początku bardziej złożonego zestawu działań. Przykład:

find . -type f -print | egrep -i '\.m4a$|\.mp3$'

Znajdzie wszystkie pliki z rozszerzeniami .m4a lub .mp3

find . -type f -print | egrep -i '\.m4a$|\.mp3$' | wc -l

Poda ci liczbę tych plików.


Jeśli -printjest to jedyny predykat, można go pominąć; dostępne jest również proste globowanie. W ten sposób znalezienie wszystkich .txtplików w katalogu foobyłoby wykonane przy pomocyfind foo -name \\*.txt
Norman Gray

@yoshi: To absolutnie nieprawda. Wpisywanie find .IS jest rekurencyjne z cwd. Spróbuj wpisać find .swój katalog główny!
drew

My źle może przysięgać nie było rekurencyjne ale może serwer chocked -shrug-
Nuala

5

Jeśli chcesz przeszukać cały folder, po prostu użyj -r na grep:

grep -r pattern folder/to/search

Dzięki find możesz także używać xargs:

find folder/to/search -name '*.txt' | xargs grep pattern

lub w celu upewnienia się, że przeszukujesz dwa pliki jednocześnie i dlatego określono nazwy plików:

find folder/to/search -name '*.txt' | xargs grep -n2 pattern

2

grepoczekuje zarówno wzorca, jak i specyfikacji pliku. Jeśli go brakuje, wykorzystuje to, co przekazano jako wzorzec, i czeka na wyszukiwanie danych za pomocą standardowego wejścia.

Jeśli chcesz użyć bardziej złożonej specyfikacji plików, użyj find.

find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print

Chcę po prostu znaleźć pliki o nazwie, którą wpisuję w poleceniu.
JFW

W takim przypadku nie musisz używać -execpredykatu w find.
Ignacio Vazquez-Abrams
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.