Tim*_*Tim 72 mac command-line time-machine macos
我想使用rm从我的 Time Machine 分区中删除一些文件/目录,但我无法这样做。我很确定问题与备份中文件的某种访问控制扩展属性有关,但不知道如何覆盖/禁用它们以使rm工作。我得到的错误的一个例子是:
% 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
Run Code Online (Sandbox Code Playgroud)
我不想为此使用 Time Machine GUI 或 Finder 的原因有很多。如果可能,我希望能够保持对所有其他文件的扩展保护(我不想全局禁用它们,除非我完成工作后可以重新启用)。
Eri*_*c W 124
要解决“不允许操作”错误,请使用Time Machine Safety Net “bypass”程序:
sudo /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass rm -rfv /Volumes/[disk]/Backups.backupdb/[path]
Run Code Online (Sandbox Code Playgroud)
在 10.8 Mountain Lion 中,bypass 移至“Helpers”:
/System/Library/Extensions/TMSafetyNet.kext/Helpers/bypass
Run Code Online (Sandbox Code Playgroud)
在 10.10 Yosemite 中,绕过移动到这里:
/System/Library/Extensions/TMSafetyNet.kext/Contents/Helpers/bypass
Run Code Online (Sandbox Code Playgroud)
使用它删除特定快照时要小心:由于 Time Machine 使用硬链接,因此rm -r
在文件夹上使用也可能会影响同一台机器的旧快照和新快照。(请参阅有关tmutil delete
安全删除特定快照的其他答案。)虽然rm
可以删除单个机器的所有快照。因此rm
用于删除特定文件,它只会从您指定的快照中删除该硬链接文件,假设该文件不在硬链接目录中,那么您实际上会从所有文件中删除该文件那些硬链接的目录。
Arn*_*röm 29
BLUF(前底线):
sudo tmutil delete snapshot-dir
使用从文件夹层次结构中删除所有的ACL不上时间机器的文件和文件夹的工作Backups.backupdb,因为在TM安全网机制,并在此说明的标准318科技期刊后(但可能不完全描述) .
(在通过查找 Eric W 的答案(有效)中提到的安全网学习这一点之前,我只测试了从 TM 备份的子文件夹克隆的文件夹,并且chmod工作。但是在实际的文件夹上尝试chmod TM 备份给出“不允许操作”错误。)sudo chmod -R -N folder
可能的用途:
在 Mac OS 10.7+ 中,有一个tmutil命令(我还没有尝试过,因为我仍在使用 Snow Leopard)。它有一个删除动词,根据描述“可以从不是由当前机器制作或没有声明的备份中删除快照”(其中“快照”是表示单个增量备份的日期文件夹)。它不是,如果这意味着,它很清楚,我无法删除快照,其是由制造或由当前机器声称。(?)
Ken*_*ent 14
关于使用该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/
Run Code Online (Sandbox Code Playgroud)
有了上述内容,从中删除任何文件/2014-11-06/folder/
都可以,并且只会影响该日期的备份。硬链接引用计数减少,因此“ inode ” forfile2
将被删除,但由于稍后的备份,inode forfile1
和file3
的引用计数仍为 1。因此, rm -R /2014-11-06
也很好。
但是,从/2014-11-13/folder/
,/2014-11-20/folder/
或 中删除任何文件/2014-11-27/folder/
都会有效地将其从所有这 3 个文件夹中删除。
问题是rm -R
不关心硬链接文件夹。它只是递归到它找到的任何硬链接文件夹,大胆地删除它的所有文件,然后删除空文件夹。
所以:删除旧备份时,不应递归到硬链接文件夹并删除其内容。相反,应该只删除文件夹本身的硬链接。所以,而不是像Arne's answer 中解释的那样rm -R
使用。tmutil delete
顺便说一句,似乎 OS Xunlink
命令不能用于文件夹:“只能提供一个不能是目录的参数”。OS X API 可以删除硬链接文件夹,GNU Coreutils也可以,例如使用Homebrew安装。
最后,为了证明以上所有内容,一个测试用例(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
Run Code Online (Sandbox Code Playgroud)
请注意,每次出现的链接数为 2(第二列)。让我们删除第一次出现:
sh-3.2# /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass unlink 2014-11-06-012454/Users/USERNAME/Library/Safari/TopSites.plist
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
因此,在取消其中一个文件的链接后,每次出现的链接数都会下降到 1 个,尽管该文件仍会显示 3 次。还没有问题。再次删除第一次出现:
sh-3.2# /System/Library/Extensions/TMSafetyNet.kext/Contents/MacOS/bypass unlink 2014-11-13-024438/Users/USERNAME/Library/Safari/TopSites.plist
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
现在一切都没有了。显然,该文件TopSites.plist
最后一次更改是在 2014 年 11 月 6 日,并在 2014 年 11 月 13 日进行了硬链接,因为随后在Safari
文件夹中添加、更改或删除了一些其他文件。接下来,Safari
文件夹的内容在随后的两次备份中没有改变,因此在 2014-11-20 和 2014-11-27Safari
文件夹被硬链接到之前的备份。
实际上,这 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//
Run Code Online (Sandbox Code Playgroud)