it-swarm-ru.tech

Как найти файл по имени файла в терминале Mac OSX?

Я хочу найти файл на моем Macbook с именем файла: abc.dmg. Я пытался использовать прожектор, но не нашел его. Когда я попытался найти и использовал: find -name abc.dmg -path /, я получил ошибки обратно.

Каков правильный синтаксис для поиска файла по имени файла с помощью команды find на терминале Mac OSX?

101
SPRBRN

В простейшей форме find принимает один параметр: путь. В своей действительно полезной форме он идет по пути сужения критериев.

Таким образом, вы хотите:

  • find (программа)
  • / (путь)
  • и -name abc.dmg (критерии).

find / -name abc.dmg

137
VxJasonxV

Например, find . -name '*.csv' работал с подстановочными знаками. OP также может использовать find . -name '*.dmg' для проверки своего текущего каталога, предполагая, что он был в /.

18
pjammer

Команда mdfind использует базу данных Spotlight

http://developer.Apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html

7
Rich Homolka

Вы можете использовать команду locate.

locate abc.dmg
6
Wuffers

Самый простой способ (который, я уверен, вы уже пробовали, но в любом случае, позвольте мне добавить его в ветку), введите abc.dmg в поле поиска в верхнем правом углу любого окна Finder, затем выберите «Файл». Имя »из опций на панели поиска, которая появляется.

Нет необходимости в терминале.

Также помните, что только Spotlight индексирует каталоги, указанные на панели управления Spotlight, и abc.dmg может отсутствовать в одном из этих каталогов.

Поправьте меня, если я не прав, но я думаю, что команда find должна знать, что выводить:

find / -name abc.dmg -print

... должен печатать любые результаты в терминал (в том числе ошибки разрешения).

Если вы не хотите ошибок разрешения и хотите искать другие пользовательские каталоги, тогда:

Sudo find / -name abc.dmg -print
3
Jupiter

Вы можете использовать следующие функции командной строки, чтобы быстро найти и открыть соответствующий файл. Я считаю это проще, чем вводить длинную строку запроса в окне прожектора.

Добавьте следующие функции в ~/.bash_aliases.

# find any item matching search query in file name
spot(){
  mdfind "kMDItemDisplayName=='*$1*'cd";
}

# restrict to files under (recursive) a specific path 
findpaper(){
    mdfind -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd";
}

# default to open the first entry unless 2nd positional argument is given
openpaper(){
    FILEID=$(printf "%sp" ${2:-1})

    open "$(mdfind -name -onlyin "/Users/foo/articles" "kMDItemDisplayName=='*$1*'cd" | sed -n "${FILEID}")"

}

Теперь либо source ~/.bash_aliases, либо откройте новые функции загрузки терминала. Для поиска файлов со словами «пирог» и «2016» в любом месте имени файла выполните

spot pie*2016 #or
spot 2016*pie

Нет необходимости добавлять или добавлять * к вашему запросу в качестве шаблона поиска, '*$1*' уже помечает подстановочные знаки в начале и конце вашего запроса. Дополнительный cd предназначен для учета без учета регистра и игнорирования диакритических знаков, например, fred возвращает оба значения: Frédéric и FrEDeric.

findpaper ограничит поиск результатами по определенному пути (рекурсивно), в то время как openpaper pie*201 откроет (или первый из нескольких результатов) результат поиска, или openpaper pie*201 3 откроет третью запись результата. Чтобы избежать открытия скриптов bash или других файлов, не относящихся к документам, вы можете ограничить содержимое файла дополнительными атрибутами поиска. См. Синтаксис выражения запроса метаданных файла и https://ss64.com/osx/mdfind.html для использования других операторов поиска.

1
Samir