Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление большого количества папок и файлов

Ответить
Настройки темы
CMD/BAT - [решено] Удаление большого количества папок и файлов

Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: finderhd
Дата: 12-02-2020
Доброго времени суток!

Имеется каталог с большим количеством папок, подпапок и файлов.

Структура следующая:

Folder_main\YYYYMMDD\Folder1\
далее подкаталоги
FolderXXX\1.dat
FolderYYY\1.dat
FolderZZZ\1.dat

Folder_main\YYYYMMDD\Folder2\
далее подкаталоги
FolderXXX\1.dat
FolderYYY\1.dat
FolderZZZ\1.dat

Folder_main - корневая, главная папка

... и т.д.

может доходить до сотней подкаталогов типа FolderXXX, а соответственно и файлов в каждой из подпапок.
Каждый файл занимает от нескольких байт, то нескольких килобайт (не более 10kb, где-то). Но их количество (как папок так и соответственно, файлов) очень большое, несколько миллионов. Почти за 10 лет. Каталог ежедневно, в одно определенное время, пополняется по принципу - новая папка - новая подпапка - новый файл.
Нужно удалить все старые папки вместе с файлами, не трогая последние три.

Пытался сделать это через Forfiles, но команда удаляет только файлы. Пытался добавить rmdir /s /q но бесполезно, выдает в ошибку о том, что путь не найден и типа того.

FORFILES /p D:\Folder_main\ /s /m *dat* /d -2000 /c "CMD /c del /Q @FILE"

2000 это я указал, чтобы не сразу весь объем...

Думал про вариант с RD, заранее скопировав три главных последних каталога (YYYYMMDD), но т.к. файлов и подпапок очень много, то такой вариант подойдет лишь разово. Да и неизвестно сколько по времени он будет удалять, боюсь, всю память сожрет. А нужно этот процесс поставить на поток, чтобы ежедневно удалял файлы и каталоги за минусом в три дня. Также, не хотелось бы грузить сервер во время удаления, поэтому предполагается удаление такого большого количества файлов и папок(подпапок) частями.

Можно конечно просто запустить в планировщик батник в выходные, и за несколько недель почистить, а папки постепенно удалить вручную, через тот же total, или удалить через rd, как я упомянул выше, т.к. в принципе последние три дня они не критичны.

Подскажите плз, кто сталкивался с подобными задачами, какое лучше решение применить в данном случае?

Отправлено: 11:19, 12-02-2020

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Перечитал всю эту эпопею.

Цитата finderhd:
Думал про вариант с RD, заранее скопировав три главных последних каталога (YYYYMMDD), но т.к. файлов и подпапок очень много, то такой вариант подойдет лишь разово. Да и неизвестно сколько по времени он будет удалять, боюсь, всю память сожрет. А нужно этот процесс поставить на поток, »
Из верных предпосылок делаете неверные выводы.

Как раз ваши попытки использовать "решение поставленное на поток" для обработки десятилетнего архива и выжрет всю память, будет работать неизвестно сколько по времени и т.п.

Так что
Цитата finderhd:
вариант с RD, заранее скопировав три главных последних каталога
самый быстрый и надёжный (из простого и доступного по крайней мере)

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

Цитата finderhd:
не хотелось бы грузить сервер во время удаления, поэтому предполагается удаление такого большого количества файлов и папок(подпапок) частями »
если у вас не настроены side-эффекты типа репликации, аудита и прочих реакций на события ФС, то блокирующей нагрузки на сервере не будет.

Что касается ежедневной зачистки - сформулируйте задачу конкретнее и сразу станет понятнее, как её решать. Выберите вариант:
  • Удалить каталоги, у которых дата в имени старше трёх суток
  • Удалить каталоги у которых дата создания старше трёх суток.
  • Удалить всё, кроме трёх последних каталогов.
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:45, 15-02-2020 | #31



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 48
Благодарности: 2

Профиль | Отправить PM | Цитировать


Как минимум есть желание поучаствовать в обсуждении, поскольку задача так скажем не самая скучная, поддержу педыдущий топик, что немного не хватает конкретики и на м.взг. не помешал бы снимок, может быть скриншот, части целевого дерева каталогов.

Отправлено: 13:47, 15-02-2020 | #32


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Iska, У Вас есть соображения по этому поводу? »
Неа, я не глядел код.

Отправлено: 21:26, 15-02-2020 | #33


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
этого не может быть. Разве что запустить его миллион раз. Какие процессы в диспетчере потребляют память? Кстати, как называется батник? »
Так и было. Запускал я батник всего лишь три раза. Запускал с интервалом в 10 минут. Первые два прошло нормально, а на третий сожралась вся память. А причем здесь название батника? Думаю, память сожралась из-за удаления возросшего количества файлов.

Цитата Busla:
А для ежедневного удаления одного файла и двух каталогов можно использовать уже почти любой инструмент не особо задумываясь о памяти и времени. »
В том то и дело. что ежедневно не один файл создается, а порядка 4,5 тыс. папок и столько же файлов. Сейчас проверил тенденцию, общий размер ежедневно появляющегося каталога стал заметно больше, порядка 30 мб. Изначально каталоги занимали по 3,5 Мб. Т.к. размер папок постепенно возрастал, а батник удалял всё что за 365 дней за 1 заход, вот и съелась оперативка. Но я об этом до последнего времени не знал.
На сервере работает по будням другой софт, но он жрет определенное количество оперативки и не более того. В среднем свободно постоянно порядка 5-7 Гб из 12.

Цитата Busla:
Что касается ежедневной зачистки - сформулируйте задачу конкретнее и сразу станет понятнее, как её решать. Выберите вариант:
Удалить каталоги, у которых дата в имени старше трёх суток
Удалить каталоги у которых дата создания старше трёх суток.
Удалить всё, кроме трёх последних каталогов. »
Так я ранее уже озвучил. Нужно удалять каталог вида YYYYMMDD за минусом трех дней. В выходные каталоги не создаются.

Сегодня они такие:

20200212
20200213
20200214

а завтра (например) должны быть уже такие:

20200213
20200214
20200217

Цитата vombat2:
Как минимум есть желание поучаствовать в обсуждении, поскольку задача так скажем не самая скучная, поддержу педыдущий топик, что немного не хватает конкретики и на м.взг. не помешал бы снимок, может быть скриншот, части целевого дерева каталогов. »
Уже было: http://forum.oszone.net/post-2909558-19.html

Последний раз редактировалось finderhd, 17-02-2020 в 09:11.


Отправлено: 08:55, 17-02-2020 | #34


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


finderhd,
Цитата:
А причем здесь название батника
если имя батника совпадает с какой-нибудь программой/командой, то возможны коллизии. Лень разбираться - запустите сколько нужно раз батник ручками на удаление сравнительно небольшого количества дней, а в планировщик затем поместите самый простой скрипт.
А, еще лучше, вообще без бат-файла одну команду
Код: Выделить весь код
cmd.exe /C FOR /F "usebackq Skip=3 delims=" %f IN (`Dir "\\Server\Test1\Folder_Main\2???????" /B /A:D /O:-N`) Do Rd /S /Q "\\Server\Test1\Folder_Main\%f"
Пути, естественно, за Вами

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 17-02-2020 в 09:54.


Отправлено: 09:37, 17-02-2020 | #35


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
если имя батника совпадает с какой-нибудь программой/командой, то возможны коллизии. Лень разбираться - запустите сколько нужно раз батник на удаление сравнительно небольшого количества дней, а в планировщик затем поместите »
не, такого нет, имя батника уникальное

Цитата megaloman:
а в планировщик затем поместите »
спасибо, попробую на тестовом сервере

Отправлено: 10:13, 17-02-2020 | #36


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
А, еще лучше, вообще без бат-файла одну команду »
Кстати, вот этот самый простой батник кстати безупречно отработал, и в шедулере корректно остановился.

Отправлено: 12:27, 17-02-2020 | #37


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата finderhd:
Так я ранее уже озвучил. Нужно удалять каталог вида YYYYMMDD за минусом трех дней. В выходные каталоги не создаются. »
вам стоило бы поправить своё первое сообщение, потому что озвучено там другое:
Цитата finderhd:
Нужно удалить все старые папки вместе с файлами, не трогая последние три. »
Работать с датами в батниках - занятие неблагодарное. Если делать по уму, то стоит писать это на PowerShell или WSH.

Отправлено: 11:24, 18-02-2020 | #38


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Busla,
Цитата Busla:
Работать с датами в батниках - занятие неблагодарное. »
Но тут этого и не требуется. Есть некий софт, который сохраняет файлы в папки с датой в имени. И три последние надо сохранить, даже не привязываясь к текущей дате, так как: "В выходные каталоги не создаются". Всё. По идее, можно привязаться и в Dir cmd к дате, например, создания папки. И три последние не трогать. Но тут что в лоб, что по лбу - есть конкретика задачи, есть некая система хранения файлов. Здесь всё просто. Не берусь судить о PowerShell, но на WSH эта задача, ИМХО, будет работать дольше, чем в CMD. А для ежедневной работы, когда мусор удалён, скрипт для сохранения несколько последних папок можно написать на чём угодно - здесь время мизерное.
Другое дело, если ежедневно создаются несколько папок с произвольными именами и надо сохранить папки за несколько последних дней - вот там будет возня с датами. Но решаемо и в CMD.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 18-02-2020 в 11:52.


Отправлено: 11:46, 18-02-2020 | #39


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата megaloman:
И три последние надо сохранить, даже не привязываясь к текущей дате »
нет

в понедельник "три последние" - это пятница, четверг и среда

а автор хочет
Цитата finderhd:
удалять каталог вида YYYYMMDD за минусом трех дней »
т.е. чтобы в понедельник у него остался только пятничный каталог

Цитата megaloman:
По идее, можно привязаться и в Dir cmd к дате, например, создания папки. »
не надо так делать
это эникейский подход "на авось"
завтра поменяют код приложения и у всех каталогов будет идентичная дата создания, потому что каталог может не создаваться, а копироваться из шаблона
что будет при переносе ПО, восстановлении из бэкапа и прочих работах?

Кто вообще сказал, что каталог формируется за сегодня, а не за вчера? А ещё
Цитата finderhd:
В выходные каталоги не создаются. »
может означать, что каталоги за СБ и ВС формируются в ПН

В общем, вы и близко не понимаете бизнес-процесс, но готовы накостылять непонятно что и свалить в туман

Отправлено: 12:41, 18-02-2020 | #40



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление большого количества папок и файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Проблема с просмотром большого количества файлов в explorer Pikki-pikki Microsoft Windows 2000/XP 8 30-05-2021 00:24
Система - [решено] проверка целостности большого количества файлов daneeall Программное обеспечение Windows 7 08-02-2013 16:25
Система - Подскажите программу для копирования / перемещения большого количества мелких файлов kiripanda Программное обеспечение Windows 13 10-08-2010 21:00
Интерфейс - [решено] Переименование большого количества файлов 7human7 Microsoft Windows 2000/XP 7 22-11-2008 09:48
Flash - Проблема копирования большого количества файлов в корневой каталог флешки SANIOK_AV Накопители (SSD, HDD, USB Flash) 2 05-09-2008 11:43




 
Переход