Найдите файлы, учитывая точное имя файла с mdfind

Я записал бы

case ":$PATH:" in
  *:$HOME/mydir:*) echo it is in the path;;
  *) echo not there ;;
esac

Я пишу ": $PATH": гарантировать, что шаблон соответствует, если желаемый путь или сначала или в последний раз в Вашем $PATH.

2
22.01.2013, 13:10
2 ответа

Я думаю, что Вам не нужны никакие регулярные выражения здесь. Просто попытайтесь искать фиксированную строку с grep. Можно включить зафиксированное сопоставление строк с -F переключатель.

Учитывая, что Ваша командная строка похожа

(filenames are produced here) | \
while read f ; \
    do mdfind -name "$f" | grep -F "/$f" ; \
done
1
27.01.2020, 22:07

Используйте питание страницы справочника.;)

В странице справочника mdfind говорится:

 -literal    Force the provided query string to be taken as a literal query string, without interpretation.

Без той опции mdfind интерпретирует символы как "* ", "+" и" ()" как регулярное выражение.

Атрибут метаданных для имени файла kMDItemFSName. Так, для нахождения файла с собственным именем:

mdfind -literal 'kMDItemFSName = "somefile.txt"'

Бонусная подсказка: можно также использовать mdls /path/to/somefile.txt осмотреть метаданные файла

2
27.01.2020, 22:07
  • 1
    Но действительно ли имя файла является атрибутом метаданных? –  alecail 22.01.2013, 13:59
  • 2
    Это работает:mdfind -literal 'kMDItemFSName == .. но это столь медленно, что это не применимо. mdfind - имя возвращается почти сразу, - литерал занимает легко 30 секунд по запросу, который я попробовал. –  alecail 22.01.2013, 14:11
  • 3
    @Antoine, который является странным. Это должно быть быстрее для не рассмотрения альтернатив. –  vonbrand 22.01.2013, 16:48
  • 4
    @vonbrand я взгляну позже - я в настоящее время перемещаю некоторых ТБ файлов - он может быть связан –  alecail 22.01.2013, 16:52
  • 5
    @vonbrand, который я просто протестировал в не занятой системе и это невероятно медленно по сравнению с mdfind - имя. –  alecail 25.01.2013, 13:26

Теги

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