[unix] 3 일보다 오래된 파일을 삭제하는 Cron 작업

3 개의 다른 디렉토리에서 cron 작업으로 3 일이 지난 파일을 제거해야합니다. (이 3 개의 디렉토리는 상위 디렉토리의 하위 디렉토리 /a/b/c/1& /a/b/c/2& /a/b/c/3) crontab에서 한 줄로 수행 할 수 있습니까?



답변

작성 시간은 특수 도구가있는 특정 파일 시스템에서만 사용할 수 있기 때문에 3 일 이상 전에 수정 시간이 소요된다는 점에 유의하십시오.

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-delete

를 제거 #전과 -delete확실이 제거 할 파일을 찾는 것을 일단.

이 크론에 의해 실행되도록하려면, 나는 아마 실행 스크립트를 (A 오두막을 추가 – 생성 할 #!bin/sh파일의 상단 라인과와 실행하기 chmod a+x), 다음 적절한에 넣어 cron같은 디렉토리 /etc/cron.daily/etc/cron.weekly. 물론 더 구체적인 일정이 필요하지 않으며 이러한 디렉토리가 배포판에 존재해야합니다.

최신 정보

아래에서 언급했듯이에 대한 -delete옵션 find은 이식성이 떨어집니다 . POSIX 호환 방식은 다음과 같습니다.

find /a/b/c/1 /a/b/c/2 -type f -mtime +3 #-exec rm {} +

#올바른 파일이 있다고 확신 하면를 다시 제거 하십시오.

업데이트 2

Stéphane Chazelas의 인용문은 다음과 같습니다.

참고 -exec rm {} +경쟁 조건 취약점이 있습니다 -delete(가능한 경우)을 가지고하지 않습니다. 따라서 다른 사람이 쓸 수있는 디렉토리에서는 사용하지 마십시오. 일부 발견은 또한 -execdir이러한 취약점을 완화시키는 것을 가지고 있습니다 .


답변

당신은 사용하는 것이 훨씬 나을 것입니다 tmpwatch

tmpwatch recursively removes files which haven't been accessed for a given time. Normally, it's used to clean up directories which are used for temporary holding space such as /tmp.


답변