find를 사용하여 파일 내용을 기반으로 조건을 확인하세요.

find를 사용하여 파일 내용을 기반으로 조건을 확인하세요.

find특정 대형 디렉터리 트리의 모든 핵심 파일을 삭제 하고 싶습니다 .

이를 위해 특정 파일 이름 패턴을 만족하는 파일을 일치시키고 싶습니다. 예를 들면 다음과 같습니다.

find . -name 'core*'

file...그러나 그러한 파일이 발견되면 해당 파일에 대해 명령을 실행하여 실제로 코어 덤프인지 확인하고 싶습니다 . 예를 들면 다음과 같습니다.

file --brief --mime <filename> | grep -q 'application/x-coredump'

명령이 성공하면 파일을 삭제하고 싶습니다. 이 모든 것을 find에서 할 수 있나요?

file중요한 것은 동작이 "단축키"라는 것입니다. 패턴과 일치하지 않는 한 명령을 실행하고 싶지 않습니다. 명령을 실행하면 속도가 매우 느려지기 때문입니다.

답변1

find+bash방법:

find / -type f -name "*core*" -exec bash -c \
'[[ `file -bi "$0"` =~ application/x-coredump ]] && echo rm "$0"' {} \;

echo"필수" 파일 이름을 찾았다면 호출을 제거하세요.


더 짧은 - find'를 사용하면-delete행동:

 find / -type f -name "*core*" -exec bash -c \
'[[ `file -bi "$0"` =~ application/x-coredump ]]' {} \; -delete

답변2

확실히 가능합니다:

find . -name '*.core' -type f -exec \
    sh 'if file -bi "$1" | grep -qw ^application/x-coredump; then printf "%s\n" "$1"; fi' \
    sh {} \;

결과가 만족스러우면 printf "%s\n"로 바꾸십시오 rm -f.

관련 정보