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

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를 삭제합니다.-deletedir/dir1/.somefile

그건2013년 FreeBSD 변경 사항, 그러나 이 변경 사항은 macOS에는 나타나지 않은 것 같습니다. 여기서 해결 방법은 간단합니다. 대신에 find dir(또는 을 디렉토리에 대한 심볼릭 링크로 find dir/허용하고 해당 디렉토리에 드롭하려는 경우 ) 다음을 수행하십시오.dirfindfind 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

관련 정보