Find
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 上。
macOS
find
基於舊版本的 FreeBSDfind
,它-delete
不會刪除作為參數給出的文件。當你這樣做時:
find dir/* ... -delete
您的shell正在將該
dir/*
glob 擴展為文件路徑列表(不包括隱藏路徑,而find
它本身不會排除它在任何這些目錄中找到的隱藏文件),因此find
會收到如下內容:find dir/dir1 dir/dir2 dir/file1 dir/file2... ... -delete
如果
dir/file1
匹配 macOS將拒絕刪除它find
。如果匹配-delete
,它會很樂意刪除 a 。dir/dir1/.somefile
這在 2013 年的 FreeBSD 中發生了變化,但這種變化顯然沒有在 macOS 中實現。在這裡,解決方法很簡單:使用
find dir
(或者find dir/
如果您想允許 fordir
成為目錄的符號連結並find
進入其中)而不是find dir/*
. 所以,在你的情況下:find ~/Library/MobileDevice/Provisioning\ Profiles/ \ -exec grep -l "text to search for" '{}' \; -delete