Удаление старых файлов?

seva2

Партнер PHPClub.ru
Удаление старых файлов?

Народ, есть папка с кешем, файлов просто очень много.... под 5 лимонов.
Стоит задача, кажду ночь, удалять по 300 тыщ файлов, которые были созданы самыми ранними, как сделать посоветуйте?

По оптимальней!

Спасибо
 

BRat

o_0
Записывать дату создания файла и его имя в БД, каждую ночь выбирать из БД 300 тыс. записей с сортировкой по дате, и удалять их
 

tf

крылья рулят
BRat, и это быстро?
зачем записывать что-то в базу
это 300 тыс никому не нужных записей?
в конце концов если неохото смотреть средствами php дату файла можно озадачить операционную систему
пускай она все сделает
выдаст спискок старых, а ты удаляй
 

BRat

o_0
tf
ну если ПХП смотреть, то это точно будет медленней. А как средствами ОС выбрать самые старые файлы я не знаю
 

tf

крылья рулят
ls если не изменяет помять на unix
dir на winde
 

BRat

o_0
tf
действительно, ступил :)

-~{}~ 15.10.06 23:42:

хотя нет, нифига не ступил..сколько по твоему времени займет показ того же dir 5 млн файлов, а потом еще и сортировка их по дате средствами PHP? в БД все это намного быстрее будет
 

tf

крылья рулят
а потом еще и сортировка их по дате средствами PHP
все это должно сделаться средствами OS она сама (при помощи ее команд) должна все отсортировать и выдать php уже отсортированный массив файлов

а пофигу что там dir покажет, это пускай спецы по windows подскажут, я ее синтакси плохо знаю :(
ln сама выдаст массив (хотя массив из 300 000 строк много памяти сьест - хоть это и оконечный результат )

хотя чего я туплю может..
seva2, у тебя какой сервер? на какой OS крутится?
если *NIX машина то можно задать команду самой операционной системе чтобы все удалила
 

kruglov

Новичок
Вообще, какое-то странное решение. Кэш обычно очищают для того, чтобы он не разрастался. Если за день появляется 400 000 файлов, а удаляем мы 300 000, то через некоторое время кэш займет диск любого размера. Если за день появляется 200 000 файлов, то рано или поздно мы удалим все файлы. Зачем тогда кэш?

короче, если Unix, то man find на поиск и удаление файлов старше некоторого времени.
 

seva2

Партнер PHPClub.ru
Сервер на UNIX

Проблема в том, что КЭШ иногда сохраняется не весь, проблема в сервере мне кажеться, пора на XEON переходить, пентюх не держит уже... Вот и я каждый день хочу старые файлы тереть вот зачем..

Я вот и хочу узхнать, как на пхп написать чтобы он сам отсортировал старые файлы и ограничел количество равное 300 тыщ?
 

Kirill

Новичок
зачем это делать средствами пхп, если можно средствами ос?
ls -al | grep name* - выбор по имени
find /path -mtime +1 - delete - удаляет файлы, которые были созданы позднее 1 суток.
Опции команды find точно не помню, проверь по мануалу, но мне кажется не ошибся. В find есть оператор "ИЛИ" в условие - это опция -o.
 

hermit_refined

Отшельник
Проблема в том, что КЭШ иногда сохраняется не весь, проблема в сервере мне кажеться, пора на XEON переходить, пентюх не держит уже... Вот и я каждый день хочу старые файлы тереть вот зачем..
Не поверите - из того, что вы написали, так и не стало понятно, почему всегда нужно удалять именно 300.000. С временем либо файлов станет слишком много, либо они все удалятся.

Если же вы действительно понимаете, что хотите - то... сначала получите трёхсот тысячный файл, потом удалите по нему, например:

find directory ! -newer `/bin/ls directory -tr | head -300000 | tail -1` -delete

(Просто rm `/bin/ls directory -tr | head -300000` не пройдёт из-за ограничения на аргументы)
 
Сверху