次の特定のテキストを含むすべてのファイルを削除しようとしています。
$ 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
macOSは、引数として提供されたファイルを削除しない以前のfind
バージョンのFreeBSDに基づいています。find
-delete
これを行うとき:
find dir/* ... -delete
あなたのシェルglobはdir/*
ファイルパスのリスト(隠しパスを除く、find
このディレクトリで見つかった隠しファイルを除外しない)に展開されるため、次find
の内容が表示されます。
find dir/dir1 dir/dir2 dir/file1 dir/file2... ... -delete
dir/file1
一致した場合、macOSは削除を拒否find
します。一致した場合はaを削除します。-delete
dir/dir1/.somefile
それは2013年のFreeBSDの変更しかし、この変更はmacOSには表示されていないようです。ここで解決策は簡単です。代わりにfind dir
(またはディレクトリへのシンボリックリンクとしてfind dir/
許可し、そのディレクトリにドロップしたい場合)、次の手順を実行します。dir
find
find dir/*
find ~/Library/MobileDevice/Provisioning\ Profiles/ \
-exec grep -l "text to search for" '{}' \; -delete