macOS 上“find ... -delete”出现“相对路径可能不安全”错误

macOS 上“find ... -delete”出现“相对路径可能不安全”错误

我正在尝试删除包含特定文本的所有文件,如下所示:

$ find ~/Library/MobileDevice/Provisioning\ Profiles/* -exec grep -l "text to search for" '{}' \; -delete
/Users/build/Library/MobileDevice/Provisioning Profiles/06060826-3fb2-4d71-82c6-7b9d309b08d6.mobileprovision
find: -delete: /Users/build/Library/MobileDevice/Provisioning Profiles/06060826-3fb2-4d71-82c6-7b9d309b08d6.mobileprovision: relative path potentially not safe

但是,正如您所看到的,它会发出警告,然后不会删除该文件。我该如何解决这个错误?

这是在 Mac 上。

答案1

macOSfind基于旧版本的 FreeBSD find,它-delete不会删除作为参数给出的文件。

当你这样做时:

find dir/* ... -delete

你的正在将该dir/*glob 扩展为文件路径列表(不包括隐藏的路径,而find其本身不会排除在任何这些目录中找到的隐藏文件),因此find会收到类似以下内容的内容:

find dir/dir1 dir/dir2 dir/file1 dir/file2... ... -delete

如果dir/file1匹配 macOSfind-delete将拒绝删除它。dir/dir1/.somefile如果匹配的话它会很乐意删除 a 。

那是2013 年 FreeBSD 发生了变化,但这一更改显然并未出现在 macOS 上。在这里,解决方法很简单:使用find dir(或者find dir/如果您想允许 fordir成为目录的符号链接并find下降到该目录)而不是find dir/*.所以,就你而言:

find ~/Library/MobileDevice/Provisioning\ Profiles/ \
  -exec grep -l "text to search for" '{}' \; -delete

或者使用更有效的grep -l --null | xargs -0方法

答案2

我在 macOS 删除所有内容时遇到了这个问题除了从目录树归档:

find top ! -name "*.tar.gz" -print -delete
... snip ...
top
find: -delete: top: relative path potentially not safe

解决方案是添加-mindepth 1排除顶级目录

find top/path -mindepth 1 ! -name "*.tar.gz" -print -delete

答案3

尝试: find ~/Library/MobileDevice/Provisioning\ Profiles/ -type f -name "name to match" -delete

编辑 - 第一个代码不是问题的答案,试试这个: find ~/Library/MobileDevice/Provisioning\ Profiles/ -type f -exec grep -l --null "pattern in file" {} + | xargs -0 rm

答案4

您需要将*文件夹路径中的星号( )(紧随其后find)更改为点(.

即,find dir/* ... -delete==>find dir/. ... -delete

相关内容