Сделать функцию поиска с помощью mdfind на MacOS Catalina - PullRequest
0 голосов
/ 27 апреля 2020

Поскольку я использую MacOS Catalina, я хотел бы воспользоваться полезной mdfind для поиска любых файлов или каталогов, соответствующих имени.

Я хотел бы переопределить функцию поиска (классическая функция, которая будет все еще доступно, набрав \locate.

Здесь небольшой двоичный файл, расположенный в ~/bin/locate:

#!/bin/bash

if [ "$2" != "" ]; then
  mdfind "kMDItemDisplayName == '*$(echo $1)*'c" -onlyin "$2"
else
  mdfind "kMDItemDisplayName == '*$(echo $1)*'c"
fi

Если нет второго аргумента, я хотел бы найти все файлы, соответствующие $ 1 (первый аргумент) и без учета регистра.

Если есть второй аргумент, он соответствует пути, по которому мы хотим провести исследование.

Но эта новая функция locate плохо работает Иногда файлы находят, а иногда нет, и я не понимаю, почему?

Кто-нибудь может помочь мне изменить этот сценарий, чтобы он соответствовал подстроке с аргументом $ 1, особенно, я не знаю, есть ли у меня $(echo $1), $(echo "$1"), echo "$1", "$1" или другие вещи с опцией kMDItemDisplayName?

Я просто хочу, чтобы была найдена вся подстрока для файлов (и, возможно, если возможный каталоги) . Я не хочу использовать Linux "locate", так как я обязан обновляться каждый раз, в отличие от mdfind, который всегда обновляется.

1 Ответ

1 голос
/ 27 апреля 2020

Не все элементы могут иметь отображаемое имя, хотя большинство элементов, кажется, имеют его. Если вы ищете имя файла, используйте kMDItemFSName. FS означает Файловую систему.

Также я думаю, что нет необходимости в echo:
mdfind "kMDItemDisplayName == '*$1*'c" -onlyin "$2"

И было бы полезно, если бы вы предоставили пример запроса, который не вернул результат, хотя должен был.

...