如何使用命令行删除 Time Machine 文件

如何使用命令行删除 Time Machine 文件

我想使用以下方法从我的 Time Machine 分区中删除一些文件/目录R M,但我无法这样做。我很确定问题与备份中文件的某种访问控制扩展属性有关,但不知道如何覆盖/禁用它们以获得R M工作。我收到的错误示例如下:

% sudo rm -rf Backups.backupdb/MacBook/Latest/MacBook/somedir
rm: Backups.backupdb/MacBook/Latest/MacBook/somedir: Directory not empty
rm: Backups.backupdb/MacBook/Latest/MacBook/somedir/somefile: Operation not permitted

出于多种原因,我不想为此使用 Time Machine GUI 或 Finder。如果可能的话,我希望能够为所有其他文件保留扩展保护(我不想全局禁用它们,除非我可以在完成工作后重新启用它们)。

答案1

要解决“操作不允许”错误,请使用时间机器安全网“绕过”程序:

sudo /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass rm -rfv /Volumes/[disk]/Backups.backupdb/[path]

在 10.8 Mountain Lion 中,旁路移至“Helpers”:

/System/Library/Extensions/TMSafetyNet.kext/Helpers/bypass

在 10.10 Yosemite 中,旁路移至此处:

/System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass

谨防使用此功能删除特定快照时:由于 Time Machine 使用硬链接,因此rm -r在文件夹上使用也可能会影响同一台机器的旧快照和新快照tmutil delete(请参阅有关安全删除特定快照的其他答案。)使用rm删除全部不过,单台机器的快照是可以的。使用删除特定文件也是如此rm,这只会从您指定的快照中删除该硬链接文件,假设该文件不在硬链接目录中,因为这样您实际上会从全部那些硬链接目录。

答案2

BLUF(底线预付):

sudo tmutil delete _snapshot-dir_

使用sudo [chmod][chmod(1)] -R -N _folder_从文件夹层次结构中删除所有 ACL 对 Time Machine 中的文件和文件夹不起作用备份.backupdb, 因为TM 安全网机制和本文所述的标准318 科技期刊邮政(但可能不完全像描述的一样)。

(在通过查找 Eric W 的回答中提到的安全网(有效)了解到这一点之前,我只在从 TM 备份的子文件夹克隆的文件夹上进行了测试,并且修改模式奏效了。但尝试修改模式在实际 TM 备份中的文件夹上出现“操作不允许”错误。)

可能用途:

在 Mac OS 10.7+ 中,有一个工具命令(我还没有尝试过,因为我还在用 Snow Leopard)。它有一个删除动词,根据描述“可以从不是由当前机器制作或未被当前机器声明的备份中删除快照”(其中“快照”是一个日期文件夹,代表单个增量备份)。我不清楚这是否意味着它不能删除快照由当前机器制造或声明。(?)

答案3

关于使用该命令删除旧备份的警告bypass:如果删除的备份具有与之前或之后的备份完全相同的文件夹,则文件也可能从早期或晚期备份中删除

Time Machine 不仅对未更改的文件使用硬链接,还对未添加、更改或删除任何文件的文件夹使用硬链接。结果如下:

/2014-11-06/folder/file1
                  /file2
                  /file3
/2014-11-13/folder/file1 = hard link to file /2014-11-06/folder/file1
                  /file2 (changed; new inode)
                  /file3 = hard link to file /2014-11-06/folder/file3
/2014-11-20/folder/ = hard link to folder /2014-11-13/folder/
/2014-11-27/folder/ = hard link to folder /2014-11-20/folder/

有了上述内容,删除任何文件/2014-11-06/folder/都可以,并且只会影响该日期的备份。硬链接引用计数会减少,因此“索引节点file2将被删除,但由于后来的备份file1, 和的 inodefile3仍将具有 1 的引用计数。因此, rm -R /2014-11-06也可以。

/2014-11-13/folder/但是,从或中删除任何文件/2014-11-20/folder/都会/2014-11-27/folder/将其从所有这 3 个文件夹中删除。

问题是它rm -R并不关心硬链接文件夹。它只是递归到它找到的任何硬链接文件夹,大胆地删除其中的所有文件,然后删除空文件夹。

所以:删除旧备份时,不应递归到硬链接文件夹并删除其内容。相反,应仅删除文件夹本身的硬链接。因此,不要按照说明rm -R使用tmutil delete在 Arne 的回答中

另外,OS Xunlink命令不能用于文件夹“只能提供一个参数,且该参数不能是目录”。OS X API 可以删除硬链接文件夹,因此GNU 核心实用程序,例如使用安装自制

最后,为了证明以上所有内容,有一个测试用例(OSX 10.6.8):

sh-3.2# ls -lFa 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist 
-rw-r--r--@ 2 USERNAME  staff  1551 10 30  2014 2014-11-06-012454/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 2 USERNAME  staff  1551 10 30  2014 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 2 USERNAME  staff  1551 10 30  2014 2014-11-20-014044/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 2 USERNAME  staff  1551 10 30  2014 2014-11-27-025033/Users/USERNAME/Library/Safari/TopSites.plist

请注意,每次出现的链接数为 2(第二列)。让我们删除第一次出现的情况:

sh-3.2# /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass unlink 2014-11-06-012454/Users/USERNAME/Library/Safari/TopSites.plist 
sh-3.2# ls -lFa 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist 
-rw-r--r--@ 1 USERNAME  staff  1551 10 30  2014 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 1 USERNAME  staff  1551 10 30  2014 2014-11-20-014044/Users/USERNAME/Library/Safari/TopSites.plist
-rw-r--r--@ 1 USERNAME  staff  1551 10 30  2014 2014-11-27-025033/Users/USERNAME/Library/Safari/TopSites.plist

因此,在取消链接其中一个文件后,链接数下降到每次出现 1 个,尽管该文件仍然显示 3 次。目前没有问题。再次删除第一次出现的情况:

sh-3.2# /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass unlink 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist 
sh-3.2# ls -lFa 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist 
ls: 2014-11*/Users/USERNAME/Library/Safari/TopSites.plist: No such file or directory

现在一切都消失了。显然,该文件TopSites.plist最后一次更改是在 2014-11-06,并于 2014-11-13 进行了硬链接,因为当时文件Safari夹中添加、更改或删除了一些其他文件。接下来,文件夹的内容Safari在随后的两次备份中没有变化,因此在 2014-11-20 和 2014-11-27,该Safari文件夹与上一次备份进行了硬链接。

事实上,这 4 个文件夹仅使用 2 个 inode(第一列):

sh-3.2# ls -lFaid 2014-11*/Users/USERNAME/Library/Safari/
648651968 drwxr-xr-x@ 86 USERNAME  staff  2924  9 10 16:06 2014-11-06-012454/Users/USERNAME/Library/Safari//
650804457 drwxr-xr-x@ 86 USERNAME  staff  2924  9 10 16:07 2014-11-13-024438/Users/USERNAME/Library/Safari//
650804457 drwxr-xr-x@ 86 USERNAME  staff  2924  9 10 16:07 2014-11-20-014044/Users/USERNAME/Library/Safari//
650804457 drwxr-xr-x@ 86 USERNAME  staff  2924  9 10 16:07 2014-11-27-025033/Users/USERNAME/Library/Safari//

答案4

注意:由于 Eric W 提到的“TM 安全网”,此答案不适用于 Time Machine 备份的情况,而该问题正是针对这种情况。但对于大多数其他情况,有关如何摆脱 ACL 的信息是相关的。


无需使用从旧操作系统复制的 ACL 工具。

用于ls -le查看 ACL 并chmod对其进行修改。

欲了解更多信息,请输入man chmod并查看“ACL 操作选项”。

从文件夹层次结构中删除所有 ACL 的命令是:

chmod -R -N foldername

相关内容