내 임무는 90일이 지난 모든 파일을 재귀적으로 삭제하는 것입니다. /dir/prd/log
즉, 하위 디렉터리에서도 마찬가지입니다. 나는 다음과 같은 명령을 내렸습니다.
find /dir/prd/log* -mtime +90 | xargs rm
그러다가 유닉스 담당자와 이야기를 나눴는데 그가 제안을 하더군요.
find /dir/prd/log* -mtime +90 -print | xargs rm -f
명령에 "-print"와 "-f"를 넣는 그의 목적이 무엇인지 궁금합니다.
답변1
-f
메시지를 표시하지 않는다고 말함 rm
(예를 들어읽기 전용 파일을 발견하면) 누락된 파일을 무시하고 (오류를 표시하는 대신) 삭제를 요청합니다. 삭제할 파일이 전달되지 않아도 불평하지 않습니다.
xargs
여기서 구현 에 따라 표준 입력은 또는 의 파이프가 됩니다 rm
. 그렇지 않은 경우 find는 !의 출력에서 이러한 프롬프트에 대한 답변을 읽게 될 수 있습니다.find
/dev/null
-f
find
-print
find
Linux 배포판의 기본 작업입니다.POSIX 호환 시스템하지만 명시적으로 지정해야 할 수도 있습니다.매우 오래된 Unix 또는 Unix 계열 시스템에서.
따라서 그의 의도는 명령을 더욱 강력하고 이식 가능하게 만드는 것일 수 있습니다. 다음 변형을 사용하면 POSIX 이상으로 더 나은 결과를 얻을 수 있습니다 find
.
find /dir/prd/log -mtime +90 -print0 | xargs -0 rm -f
find
이 작업을 지원하는 경우 "특수" 문자(공백, 개행, 탭, 작은따옴표, 큰따옴표, 백슬래시 포함)가 포함된 파일 이름과 관련된 문제를 방지하세요 -delete
.
find /dir/prd/log -mtime +90 -delete
삭제를 수행하기 위해 다른 프로세스가 생성되는 것을 방지하고 일부 경쟁 조건 문제도 방지합니다. ( /dir/prd/log
댓글에서 확인된 대로 질문의 첫 번째 문장에 명시된 요구 사항을 준수하기 위해 여기에서 지정했습니다.)
POSIX를 사용하면 find
자체 실행을 요구하여 xargs
파일 이름 확인을 피할 수 있습니다.find
rm
find /dir/prd/log -mtime +90 -exec rm -f '{}' +
이식성과 신뢰성이 더 높을 뿐만 아니라 rm
위 출력에서 프롬프트 응답을 읽는 문제를 방지합니다(또한 파일을 찾을 수 없는 경우 전체 실행을 방지합니다).find
rm
하위 디렉터리가 포함된 경우 삭제할 수 없으므로 /dir/prod/log
오류 메시지를 방지하기 위해 필터링해야 합니다 .rm
find /dir/prd/log ! -type d -mtime +90 -exec rm -f '{}' +