среда, 29 января 2014 г.

Удаление старых файлов скриптом по расписанию

Удаление старых файлов скриптом по расписанию

Небольшая заметка для тех у кого куча старых ненужных файлов на файлопомойке. 
Каждый админ у кого есть файлопомойка в сети, рано или поздно столкнется с ее чисткой. Этот процесс можно автоматизировать, простой утилитой forfiles.
Итак для начала напишем батник который будет не удалять файлы а лишь выводить их список, затем поставим его в запланированные задания, например на 21:00, просмотрим время выполнения, затем отталкиваясь от этого уже поставим в нужное нам время на удаление.

Содержимое батника для простого вывода списка без удаления

FORFILES /S /P "D:\ftp" /M *.* /D -270 /C "cmd /c echo @path\@file file was created 270 days ago"
 
FORFILES /S /P "D:\ftp" /M * /D -270 /C "cmd /c if @isdir==TRUE echo @path\@file directory was created 270 days ago"

Здесь первая строка ищет файлы не изменявшиеся (не созданные, а именно не изменявшиеся) в течении 9 месяцев (270 дней).
Вторая строка ищет каталоги

Теперь можно сделать батник для удаления ненужных файлов, и желательно поставить его после выполнения полного резервного копирования.
FORFILES /S /P "D:\ftp" /M *.* /D -270 /C  "cmd /c del @PATH"

FORFILES /S /P "D:\ftp" /M * /D -270 /C "cmd /c if @isdir==TRUE rd @PATH

Первая команда и так понятно удаляет все файлы дата изменения которых старше 9 месяцев.
Вторая находит также старые папки, но rd удаляет только если папка пуста. Если вам все равно необходимо удалить папку то добавьте опции /S /Q



FORFILES /S /P "D:\ftp" /M * /D -270 /C "cmd /c if @isdir==TRUE rd /S /Q @PATH"


2 комментария:

  1. Здравствуйте. Поискал про forfiles, прошу сильно не пинать, может плохо искал. Но вопрос! Почему никто и нигде не упоминает/ не объясняет, как сделать тоже самое, но добавить в исключения папки, которые удалять не нужно? Как будто это редкое явление - очистить нужную папку полностью, оставив только одну нужную директорию.

    ОтветитьУдалить
  2. Поставьте запрет на удаление необходимой папки, отобрав права на удаления для пользователя от которого запускается скрипт (можно с помощью того же CACLS - добавить в батник строку для запрета удаления), или поставьте - только чтение - вот в принципе хитрый и простой способ.

    ОтветитьУдалить