Файловая помойка и как ее разгрести

В жизни каждого админа был, есть и будет есть, файловый сервер. И естественно, на каждом таком сервере возникает что-то вроде "папки для обмена". Как предполагает название - файлы туда должны быть положены, а в последствии удалены, НО, пользователи как правило имеют малый объем памяти, и соответственно забывают удалить за собой плоды своего творчества. А сервера-то до сих пор не научились делать резиновыми! Вот и возникает момент, когда место на диске кончается и начинается "генеральная уборка", процесс мучительный и долгий, и хорошо, если есть ленточная библиотека для резервных копий или иное хранилище, куда можно сбросить все "ненужное", дабы потом удалить навсегда. А если нет, то "публичная порка", в случае самовольной чистки "излишков", гарантирована. Так что же делать? Ответ есть!

Во первых, и это главное по сути, на уровне руководства, т.е. директора, лучше - самого главного, делаем распоряжение о том, что, такая-то папка, на таком-то сервере, будет чистится, допустим каждый день, и файлы старше, допустим, двух недель, от туда будут удалятся.

Сделали, подписали, отксерили и повесили на каждом углу! Замечательно, теперь начнем создавать робота, который будет ловить непослушных пользователей старые файлы и безжалостно их удалять!

Сначала алгоритм:
  1. задать переменные
  2. удалить действительно старые файлы
  3. создать структуру каталогов в другом месте (отличном от оригинала, но так же доступном пользователям)
  4. перенести все, что старше 15 дней в другое место (таким образом у пользователей будет шанс самостоятельно вернуть что-то важное, в течении дня)
  5. записать на место файл с правилами пользования
  6. записать лог успешное окончание чистки
Нам понадобится два батч файла, один будет отслеживать основной алгоритм (искать старые файлы), а второй будет перемещать их с места на место.

cleaner.cmd :

echo off
rem # указываем в какой кодировке будем работать, т.к. имена файлов могут быть на русском языке, используем соответствующую кодировку
chcp 1251
cls
echo.
rem # задаем глобальные переменные
set BASED=Share\Public\----- Папка для обмена -----
set TODIR=Share\Public\---- DEL
set ROOLFILE=F:\%BASED%\! -= ВНИМАНИЕ - ПРАВИЛА =-\ЧИТАТЬ ВСЕМ.txt
rem # чистим старые файлы
echo *
echo * Clearing "F:\%TODIR%"
rd /S /Q "F:\%TODIR%"
rem # создаем новый каталог
MKDIR "F:\%TODIR%"
rem # создаем дерево каталогов, чтобы пользователи могли найти свои файлы
echo *
echo * Creating tree folder copy of "F:\%BASED%" in "F:\%TODIR%"
xcopy "F:\%BASED%" "F:\%TODIR%" /T /E
rem # переносим файлы старше 15 дней
echo *
echo * Mooving old files
forfiles /P "F:\%BASED%" /S /D -15 /C "cmd /c if @isdir==FALSE c:\mover.cmd @relpath"
rem # записываем правила на место
echo "----- Папка для обмена -----" > "%ROOLFILE%"
echo. >> "%ROOLFILE%"
echo Данный ресурс предназначен только для обмена информацией между пользователями. >> "%ROOLFILE%"
echo. >> "%ROOLFILE%"
echo Хранить свои файлы в данной папке запрещено. >> "%ROOLFILE%"
echo. >> "%ROOLFILE%"
echo Это означает, что файлы, записанные в данную папку, должны быть удалены после копирования. >> "%ROOLFILE%"
echo. >> "%ROOLFILE%"
echo Файлы, дата изменения которых превышает 2-х недельный срок, будут удаляться, предварительно они будут перемещаться в папку "---- DEL", которая находится на уровень выше. >> "%ROOLFILE%"
echo. >> "%ROOLFILE%"
echo Очистка папки будет происходить ежедневно, ночью, соответственно "вчерашние файлы" будут доступны в папке "---- DEL". >> "%ROOLFILE%"
echo. >> "%ROOLFILE%"
rem # в лог вписываем удачный перенос
echo %date% - %time% - compleated  >> cleaner.log
rem # если перенос сбился, возникла ошибка или еще чего произошло, по данным лога можно определить хотя бы дату и время, когда система встала

Писать все действия в лог бессмысленно, т.к. тогда лог будет очень большим.

mover.cmd:

echo off
rem # берем путь и имя файла для перемещения
set QWSD= %1
set QWSD=%QWSD:"=%
set QWSD=%QWSD%0
set QWSD=%QWSD:~1,-1%
rem # в процессе просмотра работы скрипта, при копировании каждого файла в окне будет выводится знак *
rem # для особо одаренных или же для отчетности, можно вставить счетчик, для подсчета количества перенесенных файлов
echo *
rem # копируем файл в папку под удаление
copy "F:\%BASED%%QWSD%" "F:\%TODIR%%QWSD%" /Y
rem # удаляем файл в оригинальном месте
del /F /Q "F:\%BASED%%QWSD%"
echo.

И так, теперь переносим эти два батч файла на сервер и создаем задание в "Планировщике задач" на запуск cleaner.cmd каждую ночь.

Всё! Задача - решена!
Comments