Как скриптом стереть в директории с кучей поддиректорий старые файлы, скажем, что старше 30 дней? Это нужно для поддержания общей папки на сервере (читай - помойки) в приличном состоянии. Сиcтема FreeBSD. Спасибо заранее.
>Как скриптом стереть в директории с кучей поддиректорий старые файлы, скажем, что
>старше 30 дней? Это нужно для поддержания общей папки на сервере
man findНапример для GNU find version 4.1.20:
find /your/directory -ctime 30+ -type f | xargs rm -f
>find /your/directory -ctime 30+ -type f | xargs rm -fСпасибо:)
>Спасибо:)
Не все так просто:( Файлы на сервере имеют даты создания, а не помещения на сервер. И если я сегодня кладу туду файл, созданный в ноябре, то он уже старый для скрипта. Может есть способ отследить дату появления файла на сервере?
>>Спасибо:)
>Не все так просто:( Файлы на сервере имеют даты создания,нет такого понятия (даты создания):
st_atime Time when file data last accessed. Changed by the
mknod(2), utimes(2), read(2) and readv(2) system calls.st_mtime Time when file data last modified. Changed by the
mkdir(2), mkfifo(2), mknod(2), utimes(2), write(2) and
writev(2) system calls.st_ctime Time when file status was last changed (inode data modifi-
cation). Changed by the chflags(2), chmod(2), chown(2),
creat(2), link(2), mkdir(2), mkfifo(2), mknod(2),
rename(2), rmdir(2), symlink(2), truncate(2), unlink(2),
utimes(2), write(2) and writev(2) system calls.
другого не дано по определению.
> а не
>помещения на сервер. И если я сегодня кладу туду файл, созданный
>в ноябре, то он уже старый для скрипта. Может есть способ
>отследить дату появления файла на сервере?Можно смотреть в сторону access time. Возвращаясь к тому же find , см. ключЪ -atime.
>нет такого понятия (даты создания):В винде есть три даты: создания, изменения и открытия.
У меня пользователи создают файлы в винде и меняются ими через сервер (Samba). А потом забывают стирать. Мне надо, что бы файлы через месяц удалялись с сервера независимо от даты доступа или изменения, потому что они могли быть созданы в прошлом году, а выложены сегодня. В результате их дата на сервере такая же, как и в винде, то есть дата создания. А доступа или изменения тоже может не быть. Юзер скопировал себе файл и все, лежит он себе там.>Можно смотреть в сторону access time. Возвращаясь к тому же find ,
>см. ключЪ -atime.С этим не получается. Копирую старинный файл на сервер, делаю: -atime -1,
в результате ничего не выводится.
Похоже, -ctime то, что нужно. Можно было после первого же ответа все сделать. Там в скрипте + должен стоять перед 30. Из-за этого я и втух. А так скрипт работает. Единственно все файлы вдруг стали исполняемыми почему-то...
Теперь осталось только разобраться с каталогами, find изменяет access time каталогов. Надо как-то удалять пустые каталоги.
>>>Спасибо:)
>>Не все так просто:( Файлы на сервере имеют даты создания,
>
>нет такого понятия (даты создания):если быть точным и занудным, то, допустим, в QNX4/6 есть такое понятие, как дата создания файла :) как в API так и на уровне fs. задается как st_ftime в struct stat.
хотя, конечно, это не POSIX/Lunix way..
// wbr
Опять у меня загвоздка.
find -ctime +30 -type f
Эта команда исправно находит файлы, но удалить их не получается, то есть если добавить '| rm -f' или '| xargs rm -f' то они не удаляются. Как быть?
PS Прошу прощения за ламерские вопросы.
Тебе ж сказали - "man find". Рекомендую всё же прочитать его, дабы не задавать лишних вопросов.
В данном случае, на предмет параметра -exec
>Тебе ж сказали - "man find". Рекомендую всё же прочитать его, дабы
>не задавать лишних вопросов.
>В данном случае, на предмет параметра -exec
>если добавить '| rm -f' или '| xargs rm -f' то
>они не удаляются. Как быть?Что пишет? Может проблема с правами доступа.
Посмотри еще програмку tmpwatch, она как раз занимается удалением старых файлов.
>>>>Спасибо:)
>>>Не все так просто:( Файлы на сервере имеют даты создания,
>>
>>нет такого понятия (даты создания):
>
>если быть точным и занудным, то, допустим, в QNX4/6 есть такое понятие,
>как дата создания файла :)Кустарные имплементации оставим за кулуарами :). Например, для форума qnx.org.ru ;-D
> как в API так и на
>уровне fs. задается как st_ftime в struct stat.если быть очень занудным :) то susv3 говорит нам о ином http://www.opengroup.org/onlinepubs/009695399/basedefs/sys/s...
Как верно замечено, это не POSIX.
Маны я читаю. С параметром -exec все работает, но не работает с |xargs, что предпочтительнее.
С правами, наверное, все в порядке, если я могу удалить любой файл вручную, да и скриптом тоже. В данный момент загвоздка одна - |xargs rm.
Пишет No such file or directory.
А чем предпочтительнее xargs ?Хотя у меня работает :)
>А чем предпочтительнее xargs ?
Тут статья хорошая
http://www.unixreview.com/documents/s=8274/sam0306g/
>Хотя у меня работает :)
А у меня нет:(
> http://www.unixreview.com/documents/s=8274/sam0306g/404: File not found
>вручную, да и скриптом тоже. В данный момент загвоздка одна -
>|xargs rm.
>Пишет No such file or directory.find -ctime +30 -type f -print0 | xargs -0 rm -f
find -ctime +30 -type d -print0 | xargs -0 rmdir
rmdir будет работать помягче, чем rm -rf.
Вот ссылка
http://www.opennet.me/opennews/art.shtml?num=2591