Відповіді:
Мені подобається використовувати tmpwatch
для цих речей, це востаннє файл був змінений. Це просто і добре працює в багатьох випадках:
tmpwatch -m 720 /path/to/cache
Для Ubuntu перевірте tmpreaper
замість цього.
Якщо ви хочете перевірити останній доступ до файлу, використовуйте наступне:
tmpwatch -a 720 /path/to/cache
Ви не можете використовувати tmpwatch -a у файлових системах, встановлених у режимі часу. ви все одно можете використовувати -m
Ubuntu 10.04.2 LTS
і ця команда не існує ..
tmpreaper
замість цього.
Спробуйте виконати вищезазначене з приємним:
nice -n 39 find cache* -mtime +30 -exec rm -f {} ';'
Таким чином величезне навантаження з’явиться лише в тому випадку, якщо більше нічого не потрібно запускати, інакше інші процеси матимуть перевагу (якщо їх приємність нижча за 19, тобто максимум).
Зауважте, що аргумент до параметра -n додається до приємності за замовчуванням, яка коливається в межах від -20 до 19. Я використав 39, так що це буде дуже приємно незалежно від того, яка оригінальна приємність там була.
Як зауважив чіборг, завантаження пов'язане із запуском rm для кожного знайденого файла. Я помітив відповідь, де tmpwatch
пропонується як альтернатива, що, я впевнений, працює добре. Однак це не обов’язково.
Find може запустити команду, виконану для виконання, один раз, якщо ви скажете їй акумулювати знайдені файли у список таких аргументів:
find /path -name "*.moo" -exec rm {} \+
Іноді це може не спрацювати, оскільки список аргументів може зрости більшим (у байтах), ніж максимально дозволений оболонкою (getconf ARG_MAX). Це може бути вирішено xargs з опцією -L.
розглянемо цей приклад:
$ 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 {} \;
.