Bash 递归运行“tmutil isexcluded”
我想递归地使用Bash 递归运行“tmutil isexcluded”,bash,macos,command-line,timemachine,Bash,Macos,Command Line,Timemachine,我想递归地使用tmutil列出当前从Time Machine备份中排除的所有文件。我知道,我可以用 tmutil isexcluded /path/to/file 但我似乎无法让它递归运行。我尝试过对排除的文件进行灰显,并将其输出到如下文件: tmutil isexcluded * | grep -i excluded >> ~/Desktop/TM-excluded.txt 但这只输出当前目录顶层的数据。我是否可以使用find或类似命令将计算机上的每个文件/目录馈送到tmut
tmutil
列出当前从Time Machine备份中排除的所有文件。我知道,我可以用
tmutil isexcluded /path/to/file
但我似乎无法让它递归运行。我尝试过对排除的文件进行灰显,并将其输出到如下文件:
tmutil isexcluded * | grep -i excluded >> ~/Desktop/TM-excluded.txt
但这只输出当前目录顶层的数据。我是否可以使用find
或类似命令将计算机上的每个文件/目录馈送到tmutil isexcluded
并提取排除的文件列表?组织命令的最佳方式是什么
我知道大部分的除外条款都可以在
/System/Library/CoreServices/backupd.bundle/Contents/Resources/StdExclusions.plist
一些特定于应用程序的排除项可以通过
sudo mdfind "com_apple_backup_excludeItem = 'com.apple.backupd'"
但我正在寻找一种方法,将文件上的实际标志与这些列表进行比较。您可以使用
find /path/to/master/dir -type f
现在,您无法通过管道将输出传输到tmutil
,因此您可以做的是
find /path/to/master/dir -type f -exec tmutil isexcluded {} \;
它的作用是:
- 我们知道
做什么find/path/to/master/dir-typef
将在它之后执行任何操作-exec
将使用{}
的输出中的每个文件,并将find
tmutil排除在外
结束\
,这样-exec
就知道应该执行什么命令(以防您想在它之后执行其他操作)-exec
- 这应该可以做到:
find /starting/place -exec tmutil isexcluded {} + | grep -F "[Excluded]" | sed -E 's/^\[Excluded\][[:space:]]*//'
这利用了tmutil
允许传递多个文件名的事实,因此我在查找的末尾使用+
而不是代码>这样我就不必为机器上的每个文件执行新的进程-这可能会很慢。grep
查找固定(F
)字符串[Excluded]
,sed
删除[Excluded]
和以下4个空格