Запретить Spotlight индексировать внешний диск

Иногда я использую внешний диск с macOS. Это в сочетании с моим текущим внутренним диском, на котором также работает macOS.

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

Я попытался обойти эту проблему на своем внешнем диске, создав исключение Spotlight для внутреннего диска. Это предотвратило отображение файлов и приложений с моего внутреннего диска. Однако это также не позволяет мне искать файлы на моем внутреннем диске, когда я загружаюсь с моего внутреннего диска! Ясно, что это то, чего я не хочу.

Кажется, что исключения Spotlight относятся к диску, что не идеально в этом сценарии.

Есть ли способ заставить Spotlight индексировать только тот диск, который загружен в данный момент? Таким образом, когда я загружаюсь с внешнего диска, я получаю результаты только с внешнего диска, и то же самое с внутренним диском.

Ответы (5)

У вас может быть сценарий, который запускается при запуске и использует технику, предложенную в этом сообщении https://apple.stackexchange.com/a/91759/183505 .

При загрузке с диска A (если вы хотите отключить индексацию Spotlight для внешнего диска B) вы можете выполнить:

touch /Volumes/DriveB/.metadata_never_index

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

rm /Volumes/DriveB/.metadata_never_index

В связанном посте также перечислены другие способы программного изменения исключений прожектора.

Вот несколько способов добавить скрипт, который будет запускаться при входе в систему: https://stackoverflow.com/questions/6442364/running-script-upon-login-mac

Удачи!


Изменить: метод с использованием сценариев bash и файлов plist.


Сначала создайте сценарий запуска. Я решил создать один в~/script.sh

Убедитесь, что он исполняемыйchmod +x ~/script.sh

Скрипт для ОС, которая хочет скрыть диск от внимания

#!/bin/bash
flagLocation="/Volumes/DriveToHide"
flagRemoved=".ney_the_index"  # a new name

# if flag exists rename it.
if [ -a "$flagLocation/.metadata_never_index" ]; then 
    mv "$flagLocation/.metadata_never_index" "$flagLocation/$flagRemoved";
fi

Скрипт в ОС, который хочет проиндексировать диск

#!/bin/bash
flagLocation="/Volumes/DriveToHide"
flagRemoved=".ney_the_index"

if [ -a "$flagLocation/$flagRemoved" ]; then
    mv "$flagLocation/$flagRemoved" "$flagLocation/.metadata_never_index"
fi

if [ ! -a "$flagLocation/$flagRemoved" ] || [ ! -a "$flagLocation/.metadata_never_index" ] ; then
    touch "$flagLocation/.metadata_never_index"
fi

Создайте plist-файл~/Library/LaunchAgents/com.user.loginscript.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Label</key>
   <string>com.user.loginscript</string>
   <key>Program</key>
   <string>/Users/yourusername/script.sh</string>
   <key>RunAtLoad</key>
   <true/>
</dict>
</plist>

Протестируйте его, загрузив и выгрузив его:

launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
Кажется, это лучший способ сделать это. Я надеялся на что-то более «родное», но это должно быть вполне надежно. Спасибо.
Я хочу упомянуть проблему, с которой я столкнулся, пытаясь реализовать это: rmкоманда требует, чтобы я запускал ее с помощью sudo. Я использую первый метод в ссылке SO, которую вы разместили. Может быть, у вас есть какие-нибудь предложения на этот счет? Нужно ли мне использовать метод запуска демона, чтобы преодолеть это?
Я обновил свой ответ слегка хакерским решением.
Если DriveToHideесть пробелы, то ваши сценарии в том виде, в каком они написаны в настоящее время, не сработают. Если вы собираетесь тестировать [ ... ]переменные, сделайте двойные кавычки, чтобы предотвратить расщепление и разделение слов. Или используйте [[ ... ]]для проверки, тогда двойные кавычки не нужны.
Красивый! спасибо пользователю 3439894. Я обновил ответ, чтобы отразить ваше предложение.
Кстати, в моем первом комментарии «предотвратить появление блобинга» — это ошибка автокоррекции, которая должна быть «предотвратить глобирование».
@hapi Вау, спасибо за усилия, которые вы приложили, чтобы написать этот метод! попробую :)

Сегодня я узнал, что вы можете использовать a sudo touch /.metadata_never_index_unless_rootfsв корневом каталоге каждого диска, чтобы отделить индексы от загрузочных дисков OS X. Это специальная версия .metadata-never-index, потому что она будет (пере)индексировать диск, когда вы загружаетесь с него, но не когда вы этого не делаете.

Это кажется хорошим ответом на вопрос. Но есть ли у вас источник для этого?

Я использую mdutilкоманду для предотвращения индексации на внешнем диске, я считаю, что это более надежно.

Чтобы проверить, включено ли индексирование на внешнем диске, выполните команду:

$ mdutil -s /Volumes/<VolumeName>

Indexing enabled. 

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

$ sudo mdutil -i off /Volumes/<VolumeName>

Indexing disabled.

Вы можете еще раз перепроверить статус индексации с помощью первой команды:

$ mdutil -s /Volumes/<VolumeName>

Indexing disabled.
Если вы добавите -dк команде ( sudo mdutil -i off -d /Volumes/<VolumnName>), это также отключит поиск.
Является ли это изменение постоянным? Будет ли это по-прежнему эффективно, если я отключу и подключу внешний диск?

Приносим извинения за новый ответ (недостаточно представителей для комментариев, так как я здесь новичок)

@hapi - я могу быть сбит с толку, но сценарии не так?

Скрипт для ОС, которая хочет скрыть диск от внимания: переименовывает.metadata_never_index

Скрипт в ОС, которая хочет проиндексировать диск: создает.metadata_never_index

Я думал, что наличие .metadata_never_indexна громкости означает, что Spotlight его проигнорировал?

Спасибо

По моему опыту, это .metadata_never_indexникак не влияет на macOS 10.13 — superuser.com/questions/591406/… ...
Ты прав. Я думаю, что сценарии делают противоположное тому, что написано в описательной строке выше.

В то время как другой ответ является хорошим способом сделать это, он может непреднамеренно вызвать проблемы и не может быть на 100% надежным. Лучшим методом было бы использовать Alfred , так как он более гибкий, чем Spotlight, на внешней ОС.

Как бы вы использовали Альфреда для этого?
Хороший вопрос. Хотел бы я вспомнить, как. Я полагаю, что говорил о том, как вы можете исключить папки из поиска Альфреда без использования метода исключения, который был предложен в другом ответе.
Я предполагаю, что имел в виду, что буду искать файлы с помощью Alfred, а не с помощью поиска Spotlight. Оглядываясь назад, это кажется глупым ответом на мой вопрос.