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
.