Log in

Bekijk de volledige versie : помогите скриптом удаления папок



velsi
30-06-2008, 21:52
Люди, кто силен в shell, помогите, а то мои познания пока только на уровне понимаю, что другие сделали и могу подправить под свои нужды =)

Задача следующая - в директории создаются папки по дням ММ-ДД-ГГГГ, в них сохраняются картики с камеры по детектору движения. Нужно на автомате удалять папки определенной давности... например неделя.

К сожалению, find не работает. Мне пока в голову приходит только делать ls -lat и удалять все, кроме первых семи папок.

velsi
05-07-2008, 22:15
отвечу сам себе, может кому потом пригодиться

итак, find есть, но его сначала надо установить


ipkg install findutils

список всех папок нужного вида не измененых за последние семь дней

find /tmp/mnt/disc1_1/camera/ -name "[0-9]*_[0-9]*_2[0-9][0-9][0-9]" -type d -atime +7

или можно сразу в cron вставить удаление

find /tmp/mnt/disc1_1/camera/ -name "[0-9]*_[0-9]*_2[0-9][0-9][0-9]" -type d -atime +7 -exec rm -R {} \;

ABATAPA
06-07-2008, 12:07
find /tmp/mnt/disc1_1/camera/ -name "[0-9]*_[0-9]*_2[0-9][0-9][0-9]" -type d -atime +7 -exec rm -R {} \;

Только почему atime? Это же время обращения - к файлам могут обращаться и после создания. Тогда уж 'ctime' (время изменения атрибутов), или 'mtime' - время модификации (для каталога это - запись/стирание/изменение атрибутов файла).

Кроме того, нужно указывать путь к 'rm', чтобы не срабатывал alias.

Рекомендую, во избежание проблем с пробелами и спец. символами в именах, всегда использовать комбинацию '-print0 | xargs -0', например, так:



find /tmp/mnt/disc1_1/camera/ -maxdepth 1 -name "[0-1][0-9]-[0-3][0-9]-20[0-1][8-9]" -type d -mtime +7 -print0 | xargs -0 /bin/rm -r

'-maxdepth 1' позволит не обходить рекурсивно каталоги.

Еще можно использовать regexp - чуть более ресурсоемко, но более гибко:


cd /tmp/mnt/disc1_1/camera/ && \
find . -maxdepth 1 -regextype posix-extended -regex '[0-9]{2}-[0-9]{2}-[0-9]{4}' -type d -mtime +7 -print0 | xargs -0 /bin/rm -r

velsi
06-07-2008, 18:05
спасибо за науку =) я только учусь

про atime, mtime, ctime в курсе, но вроде для папок это все одинаково....

ABATAPA
06-07-2008, 21:45
спасибо за науку =) я только учусь

про atime, mtime, ctime в курсе, но вроде для папок это все одинаково....

Ну как же? Время модификации, время смены атрибутов, время доступа - это всегда разные вещи.