web-dev-qa-db-ja.com

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です。

4

macOS findは、古いバージョンのFreeBSD findに基づいており、-deleteは引数として指定されたファイルを削除しません。

あなたがするとき:

find dir/* ... -delete

あなたのShellは、そのdir/*グロブをファイルパスのリストに展開しています(非表示のものは除きますが、find自体はそれらのディレクトリのいずれかで見つかった隠しファイルを除外しないでください)。したがって、findは次のようなものを受け取ります。

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

dir/file1がmacOSに一致する場合、find-deleteはその削除を拒否します。一致する場合は、dir/dir1/.somefileを削除します。

それは 2013年にFreeBSDで変更されました でしたが、この変更は明らかにmacOSに反映されませんでした。ここでは、回避策は簡単です:find dirを使用します(またはdirをディレクトリへのシンボリックリンクにして、findを子孫にすることを許可する場合はfind dir/を使用しますit)の代わりにfind dir/*。したがって、あなたの場合:

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

または より効率的なgrep -l --null | xargs -0アプローチ を使用します。

11

試してください: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

1
Matej

これは、/var/log/のすべてのファイルで文字列errを再帰的に検索しています。

Macでcutuniqxargsが利用できるかどうかはわかりませんが、これはfindを使用していません。

grep -r "err" /var/log/ | cut -d: -f1 | uniq | xargs echo

ファイルを削除するには、echormに置き換えます。

0
Michael D.

MacOSでこの問題に遭遇し、すべて削除exceptアーカイブをディレクトリツリーから削除しました。

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
0
rcoup