如何阻止OS X将Spotlight和Trash文件写入存储卡和USB记忆棒?


126

将USB记忆棒插入Mac时,OS X会在记忆棒上创建许多隐藏文件,包括Spotlight索引和“废纸folder”文件夹。

USB记忆棒“无标题”的终端示例:

$ ls -a /Volumes/Untitled
.Spotlight-V100
.Trashes
._.Trashes
.disk
.fseventsd

它甚至在相机的xD存储卡上执行此操作,因此在复制我的照片并将其从存储卡中删除后,该卡仍已满。

是否可以为USB和存储卡关闭此功能,所以OS X要么将这些文件写入主磁盘,要么根本不写入这些文件?


评论不作进一步讨论;此对话已转移至聊天
bmike

Answers:


20

2018年3月更新 似乎我的解决方案不再有效,@ ElmerCat在以下答案之一中提出了目前有效的解决方案。

他建议使用CleanMyDrive 2

弃用的解决方案

据我了解,您有2个选择:

  1. TinkerTool(免费)

替代文字

  1. BlueHarvest(商业)

替代文字


1
好,谢谢。希望在某个地方有内置设置,但至少有可用的解决方案。
jg-faustus

3
@Philip:不幸的是,Tinkertool仅根据.DS_Store文件的详细信息页面处理这些文件,这大概意味着这是唯一可以通过CLI禁用的隐藏文件-其他文件需要自定义工具。但是BlueHarvest看起来不错,并且可以满足我的需求。(在此处此处找到有关该问题的更多详细信息
jg-faustus

1
过时!以后的答案更好
Dima Tisnek

1
@ JG-浮士德不仅用Tinkertool只涉及.DS_store文件,但它这样做只是为了网络fileysystems
nhed

2
经过测试。Tinkertool在USB驱动器上不起作用(至少在10.9上有效)
pufferfish 2014年

106

对于仅特定的已安装卷(例如yourUSBstick在本示例中称为闪存驱动器),这些命令将删除现有的碎片,现在和将来停止Spotlight索引编制,停止相关的fsevents日志记录,并禁用垃圾桶功能。

mdutil -i off /Volumes/yourUSBstick
cd /Volumes/yourUSBstick
rm -rf .{,_.}{fseventsd,Spotlight-V*,Trashes}
mkdir .fseventsd
touch .fseventsd/no_log .metadata_never_index .Trashes
cd -

您可能仍然会看到想要保留的其他不熟悉的内容,例如Apple的双“ ._ *”文件以及其他与图标和窗口位置有关的Apple DS问题。


8
尽管这可能会禁用索引编制功能,但这些文件和目录仍将存在于卷中(首先是令人讨厌的部分),如果删除它们,.Spotlight *和.fseventd将会返回。事实上,.metadata_never_index是一个比平常克鲁夫特的文件清单条目。
ShreevatsaR

1
+1,实际上,我想到了他碰触自己的想法,然后来到这里寻求更好的解决方案,但是看到这个人无法抗拒+1。它解决了真正的问题-阻止汽车音频播放
损坏的

+1知道它存在,但是在我需要时总是必须找到它。如果您对USB驱动器的访问权限比对OSX系统的访问权限更多,这将很有用。
mlhDev 2014年

2
谢谢,我对“ cd-”一无所知。我仍然在推推/弹出:)。
studgeek 2014年

那目录“ .DS_Store”呢?那还在那里。有什么原因不包含在“ rm -rf”行中?
Marnix A. van Ammers

30

要防止Spotlight索引非系统卷,请在“系统偏好设置”>“ Spotlight”的“隐私”列表中添加/ Volumes。

/ Volumes是文件系统中默认挂载所有非系统磁盘的位置。

在此处输入图片说明


无法在10.8中添加/ Volumes;可以一次添加一个单独的卷。我怀疑它类似于mdutil -i off /Volumes/xxx
Dima Tisnek

15
@qarma很有可能在10.8或更高版本中添加/ Volumes。只需打开Finder窗口,按Shift+ Command+ G,弹出“转到文件夹...”窗口中,键入/Volumes,然后在Finder窗口的顶部(旁边单词“卷”)到拖动小文件夹图标上面的屏幕截图中的列表
Chris Mukherjee 2014年

我必须尝试一下...
Dima Tisnek 2014年

1
您可以添加/Volumes,但是它不起作用。
肯尼

1
在我的机器上,内置硬盘驱动器位于/Volumes/Macintosh HD,因此,如果工作正常,是否会阻止Spotlight为HD编制索引?
LarsH

17
  1. 插入USB驱动器。
  2. 导航到Macintosh HD > Applications > Utilities并打开终端。
  3. 在终端提示下,键入以下命令,并替换path_to_volume为真实路径:

    sudo mdutil -i off /path_to_volume

  4. 按回车键。

  5. 如果提示您输入密码,请输入管理员密码,然后按回车键。您将收到响应:

    /path_to_volume/: Indexing disabled for volume. 在Mac OS X 10.4或

    /path_to_volume: Indexing disabled. 在Mac OS X 10.5或更高版本中。

    Spotlight将立即停止为指定的体积编制索引。

  6. 如果您使用的是Mac OS X 10.5或更高版本,请跳至步骤9。

  7. 在终端提示下,键入以下命令,再次替换正确的路径:

    sudo mdutil -E /path_to_volume 然后按回车键

  8. 如果提示您输入密码,请输入管理员密码,然后按回车键。您将收到响应:

    /path_to_volume/: Volume index removed.

  9. 在终端提示下,键入exit然后按回车键。
  10. 退出终端。

感谢thexlab.com,其故障排除Mac OS X电子书以及其网站,以详细说明其他方法为何能起作用。


1
注意sudo要求输入当前用户的密码
user151019 2013年

这对我有用。Spotlight的磁盘使用量从2GB增加到200k。聚光灯在空磁盘上占用大量磁盘的事实是很疯狂的。我想知道我们能否将这种解决方案与某种基于USB的触发脚本结合在一起,该脚本可检测其中存在哪种USB设备并自动运行该命令。有什么想法吗?
Otheus

15

处理(正好是)spotlight文件的另一种方法是将该卷添加到您的Spotlight排除列表中。插入设备,然后转到“系统偏好设置”中的Spotlight面板。选择“隐私”选项卡。现在,将该卷从您的桌面上拖动到隐私列表中。或使用底部的+按钮添加它。该卷将不再发生聚光灯索引。


不幸的是,每当卸载卷时,它们似乎都会从隐私列表中删除。因此,每次插入存储卡或USB记忆棒时,都必须重复进行此操作
。– LarsH

9

2017年12月

您可能会想,这些年来,Apple会在Finder中内置一些功能来处理此问题。对于使用USB磁盘或SD卡在汽车或其他设备中播放媒体的人们来说,这仍然是一个非常普遍的问题。

尽管如此,开发人员还是使用了许多Apple认可的应用程序来填补空白。先前答案中列出的应用当时可能不错,但尚未维护以与现代版本的macOS一起使用。

对于安装由身份不明的开发人员编写的对文件系统具有完全控制权的东西,我也会有所警惕。不想与App Store打交道是一回事,但不想向Apple注册为开发者则是另一回事。此外,Apple至少对AppStore中的内容进行了最少的审核,并且可以轻松地从计算机上将其删除。

因此,每当您碰巧阅读此“答案”时,它给您的建议就是在App Store中搜索最新,经过良好审查且免费的内容。

TL; DR:

我在201712月20日选择的是App Store中的“ CleanMyDrive 2”。解决问题,界面友好,完全免费。(提供应用内购买的自定义图标。否则,所有内容免费提供。)

明天可能会出现更好的情况,但最重要的是:App Store为jg-faustus多年以来在这里提出的原始而持久的问题提供了免费,简单的解决方案,这是我今天遇到的一个问题。

因此,对于这似乎更像是个麻烦而不是答案,我深表歉意。但是,的确,所有以前的答案都是过时的,没有找到有用的解决方案。不说些什么会导致更多的人浪费时间摆弄终端机或安装有问题的应用程序。只需前往App Store-您无需付费。


6

在从桌面弹出设备之前,我使用MacOS Terminal命令行列出和删除所有这些文件和文件夹。对于某些文件,您可能必须使用sudo / bin / rm命令。


我也是。尽管如果不需要的话会更好,所以我正在研究替代方案。
jg-faustus

顺便说一句,该设备位于/ Volumes / <name>的某个位置
DerMike 2011年

4

我使用Clean Eject(免费)和自定义Automator服务(仍为私有),因此我可以使用该应用程序分配一个热键来清理和弹出卷。


您提到无法访问Automator服务时,这个答案实际上并不是很有帮助。您也可以共享服务吗?
nohillside

答案绝对有帮助-您可以在没有Automator操作的情况下使用该应用程序。如果要为Clean Eject添加一个特殊的快捷键,则有很多选择:Alfred,Keyboard Maestro。Automator操作不是必需的,但很有用。我将在可能的情况下将其上传到:gingerbeardman.com/services
Matt Sephton

我用来清理选定的查找器卷的服务现在已按站点上载到(请参阅上面的链接)。
Matt Sephton 2014年

感谢您的上传,使答案更加完整。
nohillside

4

@ Miles Leacy的帖子

和@ qarma的评论:

不,即使在OSX 10.9中仍然可以实现,但是您现在需要执行一些额外的步骤:

1)在Finder中单击“ 转到”,然后单击“ 转到文件夹...”。

2)键入/ Volumes,然后单击执行。

3)将打开一个Finder窗口,其顶部应显示Volumes

这是最重要的步骤:

4)在Finder窗口顶部的Volumes旁边,有一个蓝色的小文件夹图标。单击此图标并将其向左拖动到“ 收藏夹”面板中。

5)现在您可以在任何地方访问“卷”文件夹,包括在建议的Miles Leacy等Spotlight设置中。(只要您需要,只需单击“ 收藏夹”链接将其选中。)

希望这可以帮助,

最好,

弗拉德:)

~~~

如何将Volumes文件夹添加到收藏夹中,以便可以在Spotlight设置中访问它

~~~

将“ Volumes”文件夹添加到“ Spotlight例外”列表后的外观:

请注意,在后台您可以在Safari中看到我的帖子。;)

将Volumes文件夹添加到Spotlight例外列表后的外观


1
FWIW,我认为这是一个很好的答案,不需要评论。我将从其中删除该部分,并保持原样。
马克·爱丁顿

由于Mac HD是Volumes的子文件夹,因此这也不会在Mac HD上禁用Spotlight吗?
LarsH

@LarsH好问题。我不喜欢聚光灯,如今我的Mac上已完全禁用聚光灯,所以我不确定。:3
弗拉基米尔·

3

实际上,触摸.Trashes文件将是解决您的主要问题的最佳方法,因为.Trashes现在是文件而不是文件夹。这意味着当您删除文件并且驱动器不再满时,Apple无法将文件重定位到.Trashes文件夹。

另一种选择是点击Cmd-Opt-Shift-Backspace来强制Finder清空卡上的.Trashes内容,然后再将其弹出。

第一种方法确实是最好的,因为第二种方法会影响所有驱动器上的所有垃圾箱内容。

但是,从您的帖子中看来,您更担心各种点文件对驱动器的污染。如果按照上述步骤操作,将节省磁盘空间,但是将创建最少的点文件。


3

MacOS现在提供了此直接标志,您可以从终端中进行切换:

defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true

1
部分问题的好答案。这将禁用DSStore,但问题专门涉及垃圾箱和Spotlight文件,您的解决方案(据我所知)与之无关。
奥瑟斯

2

停止尝试读取隐藏的Mac OS文件的汽车音频的一种简单方法是在Windows OS中将其删除。只需将iTunes中的MP3音乐复制到USB记忆棒即可。将记忆棒交换到Windows OS中,然后从文件夹选项中选择查看隐藏文件。然后,这将允许您删除可信任的Mac放置在USB记忆棒上的每个隐藏文件,包括那些令人讨厌的.trashes文件。终于可以用于Windows操作系统了!


+1有点乏味,但是可以肯定的是,为什么不做,哈哈。
弗拉基米尔

2

我最终使用了免费的应用程序“ Hidden Cleaner ”。我汽车的MP3播放器也试图读取。(MP3filename).mp3(空心的mp3空文件)。在Finder左侧菜单上的“设备”部分中转到Macintosh HD,然后拖动USB驱动器并放到Hidden Cleaner应用程序中。它将清理空心文件并保留真实的MP3,并弹出USB。

注意:这不是永久解决方案。每次复制文件时都需要执行上述操作。我不介意。


另一个类似的程序:Windows弹出网站www011.upp.so-net.ne.jp/decafish/EjectForWindows/…–
Vinicius Pinto

在处理文件系统时,将计算机信任身份不明的开发人员不是一个好主意。我只是在说。
ElmerCat

2

这个老问题,但我终于发现了无菌的。这是一个开源实用程序,通过将所有.DS_STORE目录默认限制在一个位置来解决这个古老的问题,默认情况下,/usr/local/.dscage
安装并重新启动后,USB驱动器上不再有.DS_STORE,(对于我们中的某些人)优点是:必须禁用外部驱动器上的索引。从1.4版开始,它还支持OS X Mavericks。

Aepsis网站上的更新: “警告:Asepsis不再处于积极开发中,并且在OS X 10.11(El Capitan)和更高版本中受支持。


凉!我不知道该程序将如何处理系统崩溃或极端的CPU负载。换句话说,我想知道是否会自动处理非授权化,还是需要自己做?自动操作是件好事,因为我们不必担心,但是这也意味着程序将需要做很多检查。
弗拉基米尔

2

此处的大多数解决方案是“在弹出之前清理点文件”,而不是“防止创建点文件”。

在寻找前者的免费解决方案时,我尝试了一些选择,然后在这里选择了applescript:超级用户:有人可以使用Mac Terminal脚本删除隐藏文件吗?因为它使我可以准确地了解整个过程。

请注意,在对该答案的评论中,我进行了一些小修改以使其在OSX 10.12.1上正常工作。(在这种情况下,我不会重新发布源代码,因为这似乎是一个非常“链接友好”的问题)。


2

有史以来最愚蠢的事情,我不能简单地将其贡献给Metaxis的答案。但是,创建一个bash脚本很容易,它可以自动处理/ Volumes中的所有文件夹(如果指定,则为特定文件夹)。当文件夹显示在/ Volumes下时,应该能够使用Automator或Applescript调用它,然后您将自动禁用索引编制。

#!/bin/bash

if [ -n "$1" ]; then
    if [ ! -e "${1}/.metadata_never_index" ]; then
        echo "mdutil -i off $1"
        mdutil -i off "$1"
        cd "$1"
        rm -rf .{,_.}{fseventsd,Spotlight-V*,Trashes}
        mkdir .fseventsd
        touch .fseventsd/no_log .metadata_never_index .Trashes
    fi
else
#    echo "finding Volumes"
    find /Volumes -type d -maxdepth 1 -mindepth 1 -print0 | xargs -0 -n 1 "$0"
fi

0

我在Apple App Store中免费找到并使用了该应用程序,它对我来说非常有用。您必须在App Store中搜索所有单词“ cleanusbdrive”,而不带引号。

由何塞·A·吉门尼斯·坎波斯(JoséA.JiménezCampos)创作。




-1

我让它可以在Automator中的Sierra 10.12.3上工作。

首先,我编写了此脚本版本:它与freefly42的功能相同,只是编写相同内容的方式不同。

要为非母语bash使用者进行翻译,它的作用是:

如果使用命令行参数运行,它将尝试查看该参数是否为目录,以及该目录是否包含名为“ .disable_osx_metadata”的文件。

如果特殊文件不存在,则什么也不会发生。该驱动器将被忽略。

如果存在特殊文件,则脚本将删除所有osx元数据,并创建一些小的新项目以防止其他任何事情。例如,创建名为.Trashes的文件可防止操作系统创建名为.Trashes的目录,然后在其中写入文件。

如果不带参数运行,则它对/ Volumes中的每个目录运行一次。

因此,如果您手动运行它或单击它,它将检查所有连接的驱动器。如果在Automator中创建工作流程,则只要连接了驱动器,Automator就会为该驱动器运行该工作流。

#!/bin/bash
x=.disable_osx_metadata
[[ "$1" ]] || exec find /Volumes -type d -maxdepth 1 -mindepth 1 -exec $0 {} \;
[[ -e "$1/$x" ]] || exit 0
mdutil -i off "$1"
rm -rf "$1"/.{,_.}{fseventsd,Spotlight-V*,Trashes}
mkdir "$1/.fseventsd"
touch "$1/.fseventsd/no_log" "$1/.Trashes" "$1/$x"

保存为“ disable_osx_metadata”,chmod 755,复制到/ usr / local / bin。

$ cd Documents/disable_osx_metadata/
$ chmod 755 disable_osx_metadata
$ sudo cp disable_osx_metadata /usr/local/bin

然后打开“ Automator”,“新建”,“文件夹操作”

然后,我发现即使在Sierra 10.12.3中,您仍然可以通过非显而易见的方式在Automator中添加/ Volumes目录。

转到“查找器”,“文件”,“转到文件夹...”,手动输入“ /卷”,然后按Enter。

现在,这将显示一个包含HD和USB驱动器的窗口,但没有明显的“ / Volumes”文件夹可单击。但是标题栏显示“ / Volumes”,它也显示在底部。

您可以从标题栏或底部将“ / Volumes”旁边的文件夹图标拖放到Automator上,并将其放在“文件夹操作接收添加到以下文件和文件夹的位置:[______]”上

从Finder标题栏中拖动/卷

关闭查找器。

返回Automator:在左侧,向下滚动并向右拖动“获取文件夹内容”,并将其拖放。

然后再次在左侧,向下滚动并将“ Run Shell Script”拖到右侧,并将其拖放到“ Get Folder Contents”下方。

将“传递输入:”更改为“作为参数”。Shell:[/ bin / bash]传递输入:[作为参数]

然后将脚本从/ usr / local / bin拖到“运行Shell脚本”下的框中,使其显示为“ / usr / local / bin / disable_osx_metadata”

文件,保存,disable_osx_metadata.workflow

自动文件夹操作流程

作为参考,该文件保存在: / Users / YOUR_NAME / Library / Workflows / Applications / Folder Actions中。 如果您保存错误,我认为您必须在Finder中手动导航以将其删除。

最后,对于每个要保护的新USB驱动器,必须在根文件夹中创建一个名为“ .disable_osx_metadata”的文件。

您可以在终端中执行此操作:$ touch / Volumes / NO \ NAME / .disable_osx_metadata

或者只是保留一个带有可见名称(无前导点)的小文本文件,然后将其复制到任何新USB驱动器的根目录,并在复制后将其重命名为.disable_osx_metadata。

从现在开始,每次连接该驱动器时,都会对其进行清洁。

不像我想要的那样干净。您必须稍微污染驱动器,以便告诉操作系统不要进一步污染它。似乎没有办法使OS完全不理会它,而不添加不需要的文件。

待办事项:添加启用/禁用功能以创建/删除点文件。

TODO:这不会阻止每个目录中的.DS_Store文件。

TODO:是否可以打包脚本和foo.workflow文件,以便用户可以跳过大多数这些手动说明?我看到Automator中有一个“导出”选项,可以创建某种程序包文件。

待办事项:可能整个文章过时了。这个applescript + automator工作流程可能会更好:https : //superuser.com/questions/319553/does-anyone-have-a-mac-terminal-script-to-remove-hidden-files/814104#814104

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.