2010-12-28 17:42:34 +0000 2010-12-28 17:42:34 +0000
133
133

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

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

Какой правильный синтаксис, чтобы найти файл по имени файла с командой find на терминале Mac OSX?

Ответы (7)

182
182
182
2010-12-28 17:45:50 +0000

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

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

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

&00001

26
26
26
2016-10-27 14:11:10 +0000

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

10
10
10
2010-12-28 19:21:39 +0000

Команда mdfind использует базу данных Spotlight http://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/mdfind.1.html .

6
6
6
2010-12-28 17:44:14 +0000

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

locate abc.dmg
```.
3
3
3
2010-12-28 22:53:12 +0000

Самый простой способ (который, я уверен, вы уже пробовали, но, эй, позвольте мне добавить его в поток в любом случае) - это ввести abc.dmg в поле поиска в правом верхнем углу любого окна поиска, затем выбрать “File Name” из появившихся опций в строке поиска.

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

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

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

find / -name abc.dmg -print

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

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

sudo find / -name abc.dmg -print
2
2
2
2018-02-09 04:28:07 +0000

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

Добавьте следующие функции в ~/.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*' уже отмечает запись wild card в начале и в конце вашего запроса. Дополнительная cd предназначена для нечувствительных к регистру и игнорирующих диакритические знаки, например, fred вернет оба, Frédéric и FrEDeric.

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

0
0
0
2019-06-09 11:50:48 +0000

Захват списка каждого файла на вашем диске в качестве корневого с /

sudo find / &> ~/file-list.txt
sudo chown $(whoami) ~/file-list.txt

Cat весь файл через grep для поиска по всему диску:

cat ~/file-list.txt | grep abc.dmg

Использовать регулярные выражения, чтобы показать только .jpg и .dmg файлы:

cat ~/file-list.txt | grep -E "(\.dmg|\.jpg)"

Результат:

Applications/Visualisations/CurvedSpaces-forMac.app/Contents/Resources/Textures/paper.jpg

… и т.д. К сожалению, также будут захвачены все смонтированные диски, так что лучше всего извлечь те, Time Machine те, которые они имеют много ссылок. Так что в другом окне я запустил watch tail -n 10 ~/file-list.txt, которая показывает мне, где он находится в моей подлой взломать!

Похожие вопросы

12
5
13
8
8