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


21

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

답변:


26

작성 시간은 특수 도구가있는 특정 파일 시스템에서만 사용할 수 있기 때문에 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이러한 취약점을 완화시키는 것을 가지고 있습니다 .


감사! 부모 디렉토리를 지정한 다음 자식 디렉토리 /a/b/c/를 지정하여 모든 옵션에 대해 지정할 필요는 없습니까?
KingKongFrog

물론 POSIX 셸에서 할 수 /a/b/c/[12]있지만 하위 디렉토리에 단일 문자 이름이있는 경우에만 적합합니다. 에서 bash당신이 할 수 있습니다 /a/b/c/{1,2}. 물론 스크립트의 뱅 라인 #!/bin/bash은 crontab을 사용하고 있거나 crontab을 사용하는 경우 사용하도록 구성되어 있는지 확인해야합니다 bash(그렇지 않으면 스크립트를 변경하지 않는 것이 좋습니다).
Graeme

2
괄호 확장은 csh 기능이며 ksh, bash, zsh 및 fish에서도 지원되므로 다양한 셸을 선택할 수 있습니다. ksh, bash그리고 zsh또한 globs와의 교대 사업자가 있습니다. 참고 -exec rm {} +경쟁 조건 취약점이 있습니다 -delete(가능한 경우)을 가지고하지 않습니다. 따라서 다른 사람이 쓸 수있는 디렉토리에서는 사용하지 마십시오. 일부 발견은 또한 -execdir이러한 취약점을 완화시키는 것을 가지고 있습니다 .
Stéphane Chazelas

않는다 rm -f하여 어떤 가능한 경쟁 조건을 처리, 자동으로 오류를 처리하지 -exec?
Acumenus


9

당신은 사용하는 것이 훨씬 나을 것입니다 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.

2
tmpwatch로 바뀌 었습니다 tmpreaper(적어도 데비안에서는).
Jaap
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.