由于我的 Macbook 空间有限,我购买了一个便携式 SSD 驱动器来保存我的大文件和 Dropbox 文件夹。这在大多数情况下都有效,但是我注意到,当我迁移到这个便携式 SSD 上的文件系统时,我现在拥有数千个 ._ 文件,本质上是 1 对 1 ._ 与真实文件/文件夹。因此,如果我之前有 picture.jpg,我现在还额外拥有 ._picture.jpg 0 字节文件。
经过一番研究,我发现这与 Mac 使用非 Mac 日志文件系统并创建这些文件有关,现在我忘记了原因。
于是我开始逐个文件夹删除这些文件,但这将花费很长时间。我有大量的网站模板、备份、网站……实际上有数千个小文件,现在都有这些讨厌的 ._ 阴影。
所以我不得不想办法删除所有这些文件。我的解决方案列在下面的答案中,这是我在 Dropbox 社区页面上提供的。但我想把这个项目放在这里,看看是否有人有更好的方法来完成这项任务。
答案1
我解决这个问题的方法是,首先将我的 Dropbox 完整复制到另一个驱动器上。这可能是一个耗时的过程,至少对我来说是这样,因为我保存了这么多咨询客户的网站、备份等,这导致了数千个小文件。加上所有 ._ 文件后,文件数量翻倍了。我的文件数量在 300,000 以上。但是,备份后,我们就可以继续了。
记住,此计划假设您仅使用 Mac 上的可移动驱动器。如果您需要在文件系统之间共享,我怀疑这是否可行。我只是使用 Dropbox 应用程序本身在其他设备上管理它,而不需要包罗万象的文件系统。
- 如果 Dropbox 应用程序正在运行,请关闭它。
- 将您的 Dropbox 备份到另一个驱动器(可能很耗时),并将包含可怕的 ._ 文件。
- 为了完整性,请确认您的备份,也许使用文件夹比较实用程序/应用程序。
- 将可移动驱动器格式化为 Mac 日志文件系统。我使用的是三星便携式 SSD T3 1TB,格式化为 Mac OS Extened(日志式、加密)的安全分区。
- 新卷准备好后,请在 Finder 中打开它。
- 将备份复制到 Dropbox 文件夹
- 打开终端。
将目录更改为新卷的 Dropbox 文件夹,我的是 PSSSD/Dropbox,因此命令是:
cd /Volumes/PSSSD/Dropbox
由于对批量删除的操作感到紧张,我想得到一个“WhatIf”(powershell 参考),所以我们只进行查找而不删除。我的列表很大,所以我将其转储到一个文件中。下面的第一个命令输出到终端,第二个命令输出到文件。
find . -name '._*'
find . -name '._*' > ~/Desktop/DropBox_filestodelete.txt
- 查看列表。我的“.dropboxcache”文件夹中有很多东西,我不确定是否应该无论删除与否,但由于担心缓存会在需要时重新生成,我决定继续将其删除。
以下命令将查找以 ._ 开头的所有内容。请注意,如果您有真正重要的文件具有相同的模式,它们将被删除,您需要从备份中复制它们才能恢复。“rm -fv”是删除找到的文件。-fv 中的 f 表示删除而不提示(危险的),-fv 中的 v 表示详细,因为我想记录所有我删除的文件以供参考。
find . -name '._*' -exec rm -fv {} \; >> ~/Desktop/filesdeletedoutput.txt
- 此删除命令可能需要一些时间。实际上,我用 CTRL-C 停止了两次,但在查看日志文件后,发现它仍在运行,我只是耐心等待。
- 如果您还没有意识到,日志文件应该在您的桌面上。
现在启动 Dropbox 应用程序备份。 - 如果您对格式化的卷和文件夹使用与之前的 Dropbox 文件夹相同的名称,Dropbox 可能会开始“同步”和“索引”。
这需要一些时间。我曾经在移动 Dropbox 文件夹时遇到过问题,它不允许我选择其中已有 Dropbox 文件夹的文件夹,但不知何故,我能够通过取消其中一个警告/提示并进入 Dropbox 的“设置/首选项”来解决这个问题。
您最终应该可以让 Dropbox 恢复正常,而不再有那些令人厌烦的 ._ 文件。 我再次警告您使用 rm -fv 或 rm-rf 时,因为它会在没有警告的情况下删除,并且我相信会绕过垃圾箱或回收站。
答案2
macOS 操作系统包含该dot_clean
命令,可解决您问题中描述的问题。下面给出了 macOS 10.13.3 (High Sierra) 的手册页。
DOT_CLEAN(1) BSD General Commands Manual DOT_CLEAN(1)
NAME
dot_clean -- Merge ._* files with corresponding native files.
SYNOPSIS
dot_clean [-fmnsv] [--keep=[mostrecent|dotbar|native]] [dir ...]
DESCRIPTION
For each dir, dot_clean recursively merges all ._* files with their cor-
responding native files according to the rules specified with the given
arguments. By default, if there is an attribute on the native file that
is also present in the ._ file, the most recent attribute will be used.
If no operands are given, a usage message is output. If more than one
directory is given, directories are merged in the order in which they are
specified.
OPTIONS
-f Flat merge. Do not recursively merge all directories in the
given dir. This is off by default.
-h Help. Prints verbose usage message.
-m Always delete dot underbar files.
-n Delete dot underbar file if there is no matching native file.
-s Follow symbolic links. This will follow symbolic dot underbar
files when they are found.
-v Print verbose output.
--keep=mostrecent
The default option. If an attribute is associated with a data
fork, use that. Otherwise, use information stored in the Apple-
Double file. Note that the native fork's data is preferred even
if the data in the AppleDouble file is newer.
--keep=dotbar
Always use information stored in the AppleDouble file, replacing
any extended attributes associated with the native file.
--keep=native
Always use the information associated with the data fork, ignor-
ing any AppleDouble files.
EXAMPLES
The following is how to do an dot_clean merge on the mounted volume test,
always using the dot underbar information.
dot_clean --keep=dotbar /Volumes/test
DIAGNOSTICS
The dot_clean utility exits 0 on success, and >0 if an error occurs.
BUGS
None known.
BSD Sept 27, 2012 BSD