Find

macOS 上的“find … -delete”出現“相對路徑可能不安全”錯誤

  • May 8, 2021

我正在嘗試刪除包含特定文本的所有文件,如下所示:

$ 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 上。

macOSfind基於舊版本的 FreeBSD find,它-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

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

引用自:https://unix.stackexchange.com/questions/497666