답변:
tmpwatch
이 작업 에 사용 하고 싶습니다 . 파일을 마지막으로 수정 한 시간입니다. 간단하고 많은 경우에 잘 작동합니다.
tmpwatch -m 720 /path/to/cache
우분투의 경우 tmpreaper
대신 확인하십시오 .
파일에 마지막으로 액세스 한 시간을 확인하려면 다음을 사용하십시오.
tmpwatch -a 720 /path/to/cache
noatime으로 마운트 된 파일 시스템에서는 tmpwatch -a를 사용할 수 없습니다. 여전히 -m을 사용할 수 있습니다
Ubuntu 10.04.2 LTS
tmpreaper
대신 확인하십시오 .
chiborg가 언급 한 것처럼,로드는 발견 된 모든 파일에 대해 rm을 시작하기 때문입니다. 나는 tmpwatch
대안으로 제안 된 답변을 보았습니다 . 확실히 잘 작동합니다. 그러나 필요하지 않습니다.
찾은 파일을 다음과 같은 인수 목록에 누적하도록 지시하면 exec에 제공된 명령을 한 번 실행할 수 있습니다.
find /path -name "*.moo" -exec rm {} \+
인수 목록이 쉘에서 허용하는 최대 값 (getconf ARG_MAX)보다 커질 수 있기 때문에 때때로 작동하지 않을 수 있습니다 (getconf ARG_MAX). 이것은 -L 옵션과 함께 xargs에 의해 해결 될 수 있습니다.
이 예제를 고려하십시오.
$ echo 0 > /tmp/it;
$ for i in {0..15000};do echo $i;done |\
xargs --no-run-if-empty -L 5000 ./tmp/xr.sh
Iteration=0; running with 5000 arguments
Iteration=1; running with 5000 arguments
Iteration=2; running with 5000 arguments
Iteration=3; running with 1 arguments
$ cat tmp/xr.sh
#!/bin/sh
IT=`cat /tmp/it`
echo Iteration=$IT\; running with $# arguments
let IT=IT+1
echo $IT > /tmp/it
따라서 추가 소프트웨어를 설치할 필요가 없으며 gnu-findutils 만 있으면됩니다.
find /path -mtime +30 -print0 | xargs -0 -L 5000 rm
\+
. 평원 +
이면 충분합니다. (2)“인수 목록이 커질 수 있기 때문에 작동하지 않습니다…”. find … -exec … {} +
똑같은 일을 xargs
할 것입니다. 필요한만큼 명령을 실행합니다. 예를 들어 (예에서와 같이) 15001에서 20000 사이의 파일이 있으면 'd 프로그램 ( )을 네 번 find
실행합니다 . -exec
rm
cache*
많은 파일로 확장 되면find . -name 'cache*' -mtime +30 -exec rm {} \;
대신 시도해 볼 수 있습니다 .