Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос для знающих ANT, Удаление всех файлов кроме 3-х последних 
:(
    Опции темы
ne100r
Дата 23.5.2006, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



У меня есть некий скрипт для создания бекапов.
Каждый раз он создает папку с неймом которий содержит дату бекапа (тобиш можна сортить как по дате создания фолдера так и по названию фолдера).
Но тут возникла проблема бекапи стали занимать слишком много места. И понадобилось удалять очень старые бекапы.
Хотелось бы автоматизировать етот процес, скажем удалять все бекапи кроме 3 последних.
Знаю, что можна написать жава класик как таск для АНТа, которий будет ето делать.
Но мне би хотелось узнать более "красивое" решение (не виходя из стандартной функцыональности АНТа).
Тем более, я уверен, что не я первий, кто столкнулся с етой проблемой, что таких много, и для уже должно бить готовое решение.

Подскажи, пожалуйста, кто сталкивался с такой проблемой или просто знает решение. 
Буду рад любим советам. 
PM MAIL   Вверх
tux
Дата 23.5.2006, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 11
Всего: 132



Вот похожая проблема: http://forum.vingrad.ru/index.php?showtopic=70012. 
PM MAIL Skype GTalk Jabber YIM   Вверх
ne100r
Дата 23.5.2006, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Посмотрел на проблему виделение по дате.
Но у меня нет такой равномерности как у лог файлов.
Мои бекапи могут не создаватся по несколько дней, но могут и по 5 раз на день создаватся.
 
Мне бы просто удерживать их количество.
Скажем 3. Тобиш при создании нового бекапа (если там уже есть 3 бекапа), то просто удалить из них самый старий.
Создать новий бекап, ну и потом будет опять 3 бекапа.
 
PM MAIL   Вверх
tux
Дата 23.5.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 11
Всего: 132



Тогда можно использовать скрипты следующим образом:
Код

<target name="all">
    <scriptdef name="clean-backups" language="beanshell">
        <attribute name="dir" />
        <attribute name="count" />
        <![CDATA[
            
        import java.io.File;
        import java.io.FileFilter;
        import java.util.Arrays;
        import java.util.Comparator;

        void deleteDir(File file) {
            print(file.getAbsolutePath());
            File[] files = file.listFiles();
            for (int i=0; i<files.length; i++) 
                if (files[i].isDirectory()) deleteDir(files[i]);
                else files[i].delete();
            file.delete();
        }

        String path = attributes.get("dir");
        int fileCount = Integer.parseInt(attributes.get("count"));
            
        File f = new File(path);
        File[] files = f.listFiles(new FileFilter() {

            public boolean accept(File pathname) {
                if (pathname.isDirectory()) return true;
                else return false;
            }
                        
        });
            
        Arrays.sort(files, new Comparator() {

            public int compare(Object obj1, Object obj2) {
                File f1 = (File) obj1;
                File f2 = (File) obj2;
                if (f1.lastModified() > f2.lastModified()) 
                    return -1;
                else if (f1.lastModified() == f2.lastModified())
                    return 0;
                else return 1;
            }
        });
            
        for (int i=fileCount; i<files.length; i++) {
            deleteDir(files[i]);
        }

            ]]>        
    </scriptdef>
        
    <clean-backups dir="/home/dan/tmp/students1" count="2" />
</target>

Нужны библиотеки BeanShell и Apache BSF. В вызове clean-backups dir - каталог, в котором будут удаляться бэкапы, count - количество неудаляемых. 
PM MAIL Skype GTalk Jabber YIM   Вверх
ne100r
Дата 23.5.2006, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



СИЛЬНО !!! Я заценил. Большое спасибо. я и не знал о такой возможности, вписывать код.
Спасибо за то что не жалко било сил что-б набить такой код.

Вот правда теперь задачка:
Что лекче написать свой таск или использовать  BeanShell и Apache BSF ? :-)




СПАСИБО. 
PM MAIL   Вверх
tux
Дата 24.5.2006, 01:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 11
Всего: 132



Цитата(ne100r @  23.5.2006,  20:53 Найти цитируемый пост)
Что лекче написать свой таск или использовать  BeanShell и Apache BSF ? :-)

У определения задач на BeanShell есть и достоинства и недостатки. Кстати, BeanShell дело не ограничивается, можно писать еще на Javascript, Python, Tcl, NetRexx, XSLT, Ruby, JudoScript, Groovy, ObjectScript. Так вот, недостаток - BeanShell сложно отлаживать. В принципе можно, конечно, написать просто на Java, потом закинуть результат в скрипт Ant. Но в общем случае, способ подходит для небольших задач, если нужно что-то несложное (например, удаление бэкапов). Достоинство - предположим, нужно приложение распространять среди клиентов. Тогда если задачи определены на BeanShell, можно просто передать скрипт и все, если писать свой таск, то придется распространять еще и библиотеку с таском.  
PM MAIL Skype GTalk Jabber YIM   Вверх
jimur
Дата 24.5.2006, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 73
Регистрация: 21.4.2006

Репутация: нет
Всего: 3



Цитата(ne100r @  23.5.2006,  13:24 Найти цитируемый пост)
Мне бы просто удерживать их количество.
Скажем 3. Тобиш при создании нового бекапа (если там уже есть 3 бекапа), то просто удалить из них самый старий.
Создать новий бекап, ну и потом будет опять 3 бекапа.

эта задача решается намного проще
Код

<project name="backupper" default="backup">
    <target name="copy-prev-backups">
        <move file="my.bak.2" tofile="my.bak.3" failonerror="false"/>
        <move file="my.bak.1" tofile="my.bak.2" failonerror="false"/>
    </target>

    <target name="backup" depends="copy-prev-backups">
        <copy file="my.txt" tofile="my.bak.1" failonerror="false"/>
    </target>
</project>

да, если нужно держать 100 бэкапов, то лучше применить скриптовый язык, но для простых/реальных задач анта достаточно. 
PM MAIL   Вверх
ne100r
Дата 24.5.2006, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 23.5.2006

Репутация: нет
Всего: нет



Тоже интересный вариант. Идея мне понравилась. Мне не подходит, но за оригинальную идею ЗАЧЕТ! 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java tools & IDE's | Следующая тема »


 




[ Время генерации скрипта: 0.0474 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.