Używasz mdfind do oceny zawartości tekstowej określonego pliku?

1

Chciałbym napisać skrypt jabłkowy, aby ocenić, czy określony plik zawiera określony ciąg znaków (być może jako część instrukcji if ... then). Chcę w tym celu wywołać polecenie powłoki za pomocą mdfind i wiem, jak ograniczyć mdfind do wyszukiwania plików zawierających określony ciąg tylko w określonych katalogach:

mdfind -onlyin /Users/viktor/Desktop/ nintendo

To polecenie znajdzie wszystkie pliki zawierające ciąg „nintendo”. Czy można w jakiś sposób zapytać o plik, a nie o katalog? I zwraca true / false lub sam plik, aby wskazać, że ciąg znajduje się w treści pliku? Umieszczenie nazwy pliku po „-onlyin” oczywiście nie działa ...

Viktor Lakics
źródło

Odpowiedzi:

1

Możesz także użyć grep:

grep -qFi nintendo file.txt && echo found

-q = cicho, -F = naprawiono ciągi znaków (wyłącz regex), -i = nie rozróżnia wielkości liter.

To przeszuka rekurencyjnie (-r) i wyświetli listę nazw pasujących plików (-l):

grep -rlFi nintendo ~/Notes

Możesz także ograniczyć mdfind do określonych atrybutów metadanych , ale tak naprawdę to nie pomaga w tym przypadku:

mdfind 'kMDItemTextContent="*nintendo*"i' -onlyin ~/Notes/
Lri
źródło
1

Próbować:

set fileText to read POSIX file "/Users/John/Desktop/test.txt" as «class utf8»
fileText contains "nintendo"
adayzdone
źródło