bdd2

Программа для удаления старых архивов

Опубликовал Сергей Ирюпин (lamp) в раздел Администрирование - Сервисные утилиты

За полдня (по заданию на работе) набросал программку, удаляющую устаревшие архивы-выгрузки. Но ей, в принципе, можно обрабатывать списки любых файлов. Буду рад, если кому пригодится. Готов вносить изменения по просьбам использующих.

Задача была поставлена так: сохранять N самых свежих архивов плюс 10 самых последних за 1 число месяца.

Работает из командной строки:

dofiles.exe /f<маска_файлов> /d /n<количество_файлов>

ключи:

/f - позволяет указать маску для обрабатываемых файлов

      пример: /f*.zip (все zip файлы в текущем каталоге)

      по умолчанию: /f*.*

/d - удалять или не удалять файлы (полезно для отладки)

      пример: /dY (удалять файлы)

      по умолчанию: /dN

/n - количество сохраняемых файлов

      пример: /n20 (сохранять последние 20 самых свежих файлов)

      по умолчанию: /n10

Скачать файлы

Наименование Файл Версия Размер
Исполняемый файл программы dofiles
.exe 32,28Kb
24.08.14
30
.exe 32,28Kb 30 Скачать
Исходный текст программы на freepascal
.pas 2,55Kb
24.08.14
3
.pas 2,55Kb 3 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Владислав Чинючин (vcv) 82 26.11.09 15:09 Сейчас в теме
Полдня жизни потрачены зря. Вот этот кусок скрипта у меня чистит журналы автообмена 1С.

for /F "skip=100 tokens=*" %%i in ('dir /o-D /B "%BASE%\SYSLOG\AutoExchange.*.mlg"') do (
echo %DATE% %TIME% REMOVE old journal %%i |%LOG%
@del /Q /F "%BASE%\SYSLOG\%%i"
)

Переменные:
BASE - путь к базе данных 1С
LOG - имя log-файла
skip=100 - задает сколько логов сохраняем.
2. Сергей Ирюпин (lamp) 25 26.11.09 15:33 Сейчас в теме
Прошу прощения, забыл один момент в поставленном задании (добавил его сейчас в описание). Кроме N самых свежих архивов нужно сохранять 10 самых свежих архивов за 1 число месяца.

Сможете это реализовать скриптом?
3. GSoft. (GSoft) 2687 26.11.09 15:38 Сейчас в теме
(2) в принципе эту задачу тоже можно решить скриптами

(1) все когда то начинают с нуля, я на днях выложил свою первую базу (Год 2002: моя первая база ) на 1С, сейчас бы я за то время которое потратил на нее - сделал бы гораздо более функционально.
4. Альтаир (Altair777) 633 26.11.09 15:57 Сейчас в теме
Что-то я не понял. А где программа?
5. Сергей Ирюпин (lamp) 25 26.11.09 16:04 Сейчас в теме
Прошу прощения, разместил.
6. Альтаир (Altair777) 633 26.11.09 16:06 Сейчас в теме
7. Владислав Чинючин (vcv) 82 26.11.09 20:45 Сейчас в теме
(2) Прошу прощения, забыл один момент в поставленном задании (добавил его сейчас в описание). Кроме N самых свежих архивов нужно сохранять 10 самых свежих архивов за 1 число месяца.
Сможете это реализовать скриптом?

Совершенно не проблема. Единственное, из того, что желательно в вашей задаче, что не удается без внешних утилит реализовать на штатном batch - это независимость от формата даты (это касательно проверки на первое число). Все остальное, что вы хотите, легко и непринужденно умещается в десяток строк скрипта. А формат даты просто ставим нужный DD/MM/YYYY.
8. Сергей Ирюпин (lamp) 25 27.11.09 10:38 Сейчас в теме
...не удается без внешних утилит реализовать на штатном batch - это независимость от формата даты (это касательно проверки на первое число)

Да, именно так. Потому что программа обрабатывает разные списки архивов, где формат имени разный (где ДД.ММ.ГГГГ, где ГГГГММДД, где ГГГГ-ММ-ДД) и изменить формат имен архивов невозможно.
К тому же на Pascal я программирую с 88 года, а вот скриптовый Win язык знаю пока что слабо.
9. Владислав Чинючин (vcv) 82 27.11.09 12:50 Сейчас в теме
(8) Не зачем обрабатывать имя, когда есть дата создания файла. Или изменения.
К тому же на Pascal я программирую с 88 года

Реализовывать на известном языке, это, конечно, огромный плюс, но есть достаточно специфичные задачи, которые во много раз проще решаются на каком-нибудь специализированном языке. Если, например, стоит задача анализа текстовых логов, решение с помощью perl/php/sed/awk... будет гораздо компактней, проще, легче в поддержке...
а вот скриптовый Win язык знаю пока что слабо.

Опоздал ты изучать batch. Для администрирования винды учить надо VisualBasic или Java для писания скриптов для WindowsScript. Или готовиться к будущему изучая PowerShell.
10. Владислав Чинючин (vcv) 82 27.11.09 12:54 Сейчас в теме
(8) Скриптовый язык операционки хорош тем, что позволяет использовать различные утилиты. Как штатные, так и сторонние. Что бы не писать много и не изобретать велосипед.
Вот, набросал на скорую руку, как бы я решил твою задачу встроенными средствами плюс набор консольных утилит, портированных их юниксов.
@echo off
REM *** Делаем список бэкапов отсортированный по дате изменения (/TW) 
REM *** по маске *.zip
set FLIST="%~dpn0.lst"
dir /A-D-S /TW /OD *.zip | findstr /R /C:"^..\/..\/.... " >%FLIST%

REM *** Делаем список неудаляемых бэкапов из 5 самых свежих (-n5)
REM *** и по 2 шт самых последних в каждое 1-е число месяца (-n2)
set NoDEL="%~dpn0.excl"
tail -n5 %FLIST% >%NoDEL%
for /F "tokens=*" %%i in ('cut -b4-10 %FLIST% ^| sort ^| uniq') do (
	findstr /B /C:"11/%%i" %FLIST% | tail -n2 >>%NoDEL%
)

REM *** Делаем список файлов к удалению
set DEL="%~dpn0.del"
del %DEL% 2>nul
for /F "tokens=*" %%i in ('type %FLIST%') do (
	findstr /B /C:"%%i" %NoDEL% >nul || echo %%i>>%DEL%
)

REM *** Удаляем все лишнее
for /F "tokens=*" %%i in ('cut -b37- %DEL%') do (
	echo DEL /Q %%i
)
del %FLIST%
del %NoDEL%
del %DEL%
...Показать Скрыть
11. Владислав Чинючин (vcv) 82 27.11.09 12:58 Сейчас в теме
+(10) Чуть не забыл, скрипт расчитан на формат даты, выдаваемой командой DIR в виде DD/MM/YYYY.
В строке
findstr /B /C:"11/%%i" %FLIST% | tail -n2 >>%NoDEL%
нужно 11 заменить на 01. Это у меня больше тестовых файлов на 11 число валялось. :-)