Как создать сохраненный поиск, исключающий определенную папку из результатов?

Я пытаюсь настроить сохраненный поиск на своем Mac, который будет исключать файлы в папке с именем «XYZ» из результатов поиска. Причина в том, что я получаю массу ложных срабатываний из этой папки, которые трудно разобрать.

Просто для ясности: я знаю, что вы можете добавлять папки в список «Конфиденциальность» в настройках Spotlight, но я не хочу добавлять эту папку в этот список, потому что я не хочу исключать ее из всех будущих поисков. , только этот конкретный сохраненный поиск. Любая идея, как что-то подобное можно сделать?

После некоторого поиска в Google и моих собственных тестовых поисков я не думаю, что это можно сделать :(
Это, кажется, общее мнение. Спасибо, что нашли время, чтобы изучить его. Я отмечу этот вопрос как завершенный, если вы хотите отправить его в качестве ответа.

Ответы (8)

Я просмотрел некоторые из сохраненных файлов поиска в пакете приложений Finder и, например, /System/Library/CoreServices/Finder.app/Contents/Resources/MyLibraries/myDocuments.cannedSearch/search.savedSearchиспользовал такой формат для исключения каталогов:

<key>FXScopeArrayOfPaths</key>
<array>
  <string>~/</string>
  <string>-Library</string>
  <string>-Music/iTunes</string>
  <string>-Documents/Steam Content</string>
  <string>~/Library/Mobile Documents/</string>
  <string>-com~apple~Keynote</string>
  <string>-com~apple~Pages</string>
  <string>-com~apple~Numbers</string>
</array>

Таким образом, вы можете исключить подпапки, добавив строки, начинающиеся с символа минус после полного пути. Что-то вроде -~/Libraryне работает.

Вы можете редактировать сохраненные файлы Search, перетаскивая их в текстовый редактор. RawQueryDict:SearchScopesи FXScope:FXScopeArrayOfPathsкажется, что по умолчанию перечислены одни и те же пути, но простое редактирование второго, по-видимому, исключает папки, по крайней мере, в Finder.

Вы, возможно, обнаружили что-то здесь. Кажется, это работает! Спасибо, что разобрались. Вы избавили меня от головной боли - и, вероятно, бесчисленное множество других, которые найдут этот вопрос в будущем.
Жаль, что это невозможно сделать без редактирования XML, но да, очень приятно найти :)
Кто-нибудь знает, можно ли сопоставить имя папки независимо от пути? т.е. игнорировать подпапку /nospotlight в каждой родительской папке, /folder1/nospotlight, /folder2/nospotlight....
Я могу подтвердить, что это работает, редактируя файлы ~/Library/Saved Searchesв OSX 10.10.x.
Больше не работает в Sierra

Если удерживать optionкнопку (+), чтобы добавить критерий поиска, он станет (…) и Any/All/Noneблоком. Установите это значение None .

В качестве критериев выберите Document Container. Его не будет в списке по умолчанию рядом с Name, и т. д Kind. Выберите, Other…чтобы выбрать его из списка дополнительных критериев, если у него есть собственная функция поиска :Все эти атрибуты

Установите это на имя папки, которую вы хотите исключить, используя все , что is/contains/begins with/ends withвы считаете подходящим.

Конечный результат должен выглядеть примерно так:результат

Это работает, и это должен был быть выбранный ответ. :) Спасибо.
У меня это не работает на OSX 10.9.5
Только что проверил в 10.10 [Yosemite], похоже, ничего не изменилось. У меня нет под рукой машины 10.9 [Mavericks], чтобы проверить в данный момент, но я не помню, чтобы она пропадала. Какая часть не работает для вас?
Возможная причина, по которой Document Containerневозможно исключить папки: apple.stackexchange.com/questions/132860/… (у меня это не работает на 10.8.5)
У меня не работает в Сьерре.

Я хочу добавить, что если «Контейнер документов» не работает для вас (например, моя проблема), вы можете настроить папку поиска для включения/выключения определенных папок.

Извините, у меня нет «представителей» для размещения изображений, поэтому я сделаю все возможное. Это мой первый пост, так что не стесняйтесь флеймить.

Для моего рабочего процесса организации музыки я хотел, чтобы папка iTunes скрывала ошибочные подпапки. Конечно, перемещение папок из папки iTunes было невозможным, поскольку это сломало бы / взбесило iTunes и заставило бы воссоздать те же самые папки. Вот как я добился этого, изменив описанный выше метод Лейка:

  1. Перейдите в папку iTunes в меню Finder > «Файл» > «Новая смарт-папка».
  2. В начальных критериях поиска выберите Kind> is>Folder
  3. Следуя примеру Лейка, в раскрывающемся списке, созданном с помощью удерживания optionи (+), выберите Any of the following are true(это для папок с согласием). Чтобы отказаться от папок, как упоминалось выше, измените «Любой» на «Нет».
  4. Поскольку я «выбираю» папки, я вложил 5 критериев под Anyопцией, которая выглядела так (например, используются фактические имена папок):

Name is«Автоматически добавлять в iTunes»
Name is«Музыка»
Name is«МУЗЫКА ДЛЯ ДОБАВЛЕНИЯ — ГЛАВНАЯ ПАПКА»
Name is​​«Результаты TuneUp»
Name is«Тегирование MusicBrainz»

Таким образом, конечным результатом является то, что когда я нажимаю на интеллектуальный поиск (расположенный на боковой панели Finder для меня), я вижу только 5 папок, которые я хочу, не разрушая присущую структуру папок основной папки, в которой они находятся.

Я надеюсь, что это поможет.

Добро пожаловать на сайт! Спасибо, что нашли время подробно описать свое решение. Если вы считаете, что снимок экрана поможет, загрузите его на общедоступный сайт (например, Dropbox) и добавьте ссылку на ответ или в комментарии. Затем кто-то с большей репутацией встроит его в ваш ответ.

В настоящее время я не думаю, что это можно сделать. Похоже, что Google находит довольно много людей, пытающихся сделать это, и ни у кого нет реального ответа (кроме исключения конфиденциальности) :(

В поисковике при поиске файлов их можно исключить, добавив минус перед критериями. Например, я хочу найти все файлы, которые не являются файлами PDF, я могу написать «Вид -pdf». Кажется, это работает для меня.

Я почти уверен, что нашел другой способ сделать это.

При настройке смарт-папки используйте атрибут поиска Raw Query. По умолчанию его нет в раскрывающемся меню атрибута поиска, поэтому вам нужно будет найти его, щелкнув «Другое» в нижней части раскрывающегося меню.

В поле ввода рядом с необработанным запросом введите:

kMDItemPath != "/Users/yourname/Documents/foldertoexclude" 

в котором текст в кавычках — это путь к папке, которую нужно исключить, которую можно найти через Get Info.

У меня это не работает на OSX 10.9.5
Я очень надеялся, что это сработает, но без радости. В документах говорится: «[...], но его нельзя использовать в запросе или для сортировки результатов поиска». ( developer.apple.com/library/mac/documentation/CoreServices/… ) по какой-то причине, мы никогда не узнаем

Основываясь на ответе @Lri, я написал рабочий процесс Automator с приведенным ниже скриптом Apple. Не очень тонкий и еще многое предстоит раскрыть (например, относительные пути к папке поиска), но это работает как базовая концепция.

set savedSearch to path/to/.savedSearch
set exPath to (POSIX path of ((choose folder with prompt "Directory to exclude") as alias)) as text
set userPath to (POSIX path of (path to home folder as alias)) as text
set xmlExclude to "-" & (characters 1 thru -2 of findAndReplaceInText(exPath, userPath, ""))
set cmd to "/usr/bin/plutil -insert SearchCriteria.FXScopeArrayOfPaths.1 -string " & quoted form of xmlExclude & " " & quoted form of savedSearch

do shell script cmd

on findAndReplaceInText(theText, theSearchString, theReplacementString)
    set AppleScript's text item delimiters to theSearchString
    set theTextItems to every text item of theText
    set AppleScript's text item delimiters to theReplacementString
    set theText to theTextItems as string
    set AppleScript's text item delimiters to ""
    return theText
end findAndReplaceInText

on split(theString, theDelimiter)
    set oldDelimiters to AppleScript's text item delimiters
    set AppleScript's text item delimiters to theDelimiter
    set theArray to every text item of theString
    set AppleScript's text item delimiters to oldDelimiters
    return theArray
end split

Я тоже страдал от той же проблемы и нашел способ сделать это.

Перейдите в «Система настроек» > «Spotlight» > «Выбрать», затем выберите вкладку «Конфиденциальность», и вы можете добавить определенные местоположения, чтобы исключить их из поиска Spotlight.

Я пробовал, работает.

Вы пропустили эту часть? «Просто для ясности: я знаю, что вы можете добавлять папки в список «Конфиденциальность» в настройках Spotlight, но я не хочу добавлять эту папку в этот список, потому что я не хочу исключать ее из всех будущих поиск, только этот конкретный сохраненный поиск».