PDA

Показать полную графическую версию : [решено] Удаление большого количества папок и файлов


Страниц : 1 [2] 3

finderhd
14-02-2020, 16:14
Зачем тогда вся эта куча лишней информации про вложенные папки и какие-то файлы?
Ещё раз - есть D:\Reports\Folder_main\, в которой есть вложенные папки. Надо грохнуть все эти вложенные папки со всем содержимым, за исключением тех, которые были созданы за последние 3 дня, верно? »
Пожалуй я сам намутил много лишней инфы. Просто хотел, чтобы подробнее было. Прошу меня извинить, но такой уж я педантичный по натуре :)

Да, всё именно так, как вы сказали. Нужно грохнуть все вложенные папки, чтобы оставились только за последние три дня. Но доп. услорвия про то, что таких файлов и папок очень много, и нужно максимально снизить нагрузку на сервер при выполнении батника - остаются в силе. Файлы, не смотря на то, что небольшие, занимают очень много места, которое может исчисляться десятками гигабайт.
PS. С PowerShell вообще не знаком.

DJ Mogarych
14-02-2020, 16:24
"батник"

powershell -command "dir D:\Reports\Folder_main -Directory |sort creationtime |select -SkipLast 3 |del -Recurse -Force"

Нагрузка будет только на дисковую подсистему.

finderhd
14-02-2020, 16:30
finderhd, Да запустите уж наконец мой скрипт! Я изнываю от любопытства! Мне прежде всего интересно время. »
Ок, давайте запущу и понаблюдаю за 5 минут, сколько было и сколько удалится. )
За отсчет будет взята папка за такой год: [20110615]. Все папки вида YYYYMMDD по размеру и количеству подпапок и файлов примерно одинаковые. Количество папок YYYYMMDD примерно 2185 (точно не успел увидеть, т.к. батник уже запустил). Так мы посчитаем среднее значение. По результатам, отпишусь.

Итак, запустил Ваш первый батник (вот этот: http://forum.oszone.net/post-2909428-8.html)

Параметры поставил такие:

Set /A Skip=3
Set /A MaxCount=365

Было каталогов вида YYYYMMDD: 2185, через 5 минут работы батника стало: 1818

Изначальная папка была [20110615], после 5 минут работы батника: [20121123]. Также забыл здесь заметить, что в выходные папки не создаются, только в будние дни, поэтому даты в названиях папок вида YYYYMMDD могут "скакать".
Итого получаем, 367 папок вида YYYYMMDD за 5 минут. Очень хороший результат! :happy:
Так я и не понял, про параметр Set /A MaxCount=365, при условии, что стоит параметр Set /A Skip=3 )

Iska
14-02-2020, 17:18
Я бы сделал проще:

взял Far Manager;
вошёл в искомый каталог на одной панели;
создал на том же разделе другой каталог;
вошёл в него на другой панели;
отспортировал бы каталоги по нужному критерию;
выделил бы все искомые каталоги либо по маске, либо по дате;
убрал бы из выделения «три последних»;
переместил бы все выделенные каталоги с одной панели на другую;
посмотрел бы на результат;
если всё верно — перешёл бы на ту панель, куда переместил лишние каталоги;
выполнил бы в нём «rd /q /s».

megaloman
14-02-2020, 17:43
Так я и не понял, про параметр Set /A MaxCount=365, при условии, что стоит параметр Set /A Skip=3 )Вы меня не читаете.
Вам надо оставить 3 папки (дня). Можно, естественно, поставить иное кол-ао папок.
Set /A Skip=3
Так как непонятно было, насколько быстро удаляются папки (Вы их собирались удалять чуть ли не месяц), сделал Вам вариант, какое максимальное количество папок за один запуск батник удалит. Я от фонаря поставил 365, то есть год.
Set /A MaxCount=365
Можно поставить значение, равное или больше количества имеющихся папок. Тогда батник удалит все, за исключением 3 последних.
Судя по Вашему отзыву, надо поставить большое значение, и убить все старье за раз.
Батнику глубоко безразлично, когда папки создаются или не создаются, скачут даты или ползают. Останутся 3 последние папки с максимальными значениями даты в имени.

Я бы сделал проще:Совершенно верно. Один недостаток - в планировщик такое не вставишь.

finderhd
14-02-2020, 17:56
Можно поставить значение, равное или больше количества имеющихся папок. Тогда батник удалит все, за исключением 3 последних.
Судя по Вашему отзыву, надо поставить большое значение, и убить все старье за раз.
Батнику глубоко безразлично, когда папки создаются или не создаются, скачут даты или ползают. Останутся 3 последние папки с максимальными значениями даты в имени. »
я уже понял, прошу прощения. Так и сделаю. Но высплыла одна проблемка - если запускать батник через планировщик (проверяю на тесте - там, три папки за последние дни и две старые), то он запускается, читстит всё, но не останавливается. Приходится вырубать его руками - процесс висит как Runing, и в History видно что планировщик не остановился. Также подскажите плз. как сделать так, чтобы при запуске батника из планировщика, запускалось окошко? Echo on не помогает. При Forfiles, моем первом батнике всё отрабатывает корректно, правда окошко на нем тоже не смог заставить отображаться.

megaloman
14-02-2020, 18:04
читстит всё, но не останавливается. Приходится вырубать его руками.В смысле? Запрос нажать на клавишу? Уберите pause или закомментируйте ее:
Rem pause
чтобы при запуске батника из планировщика, запускалось окошко? Echo on не помогает.
A что Вы хотите видеть?

finderhd
14-02-2020, 18:39
Вобщем, ситуация такая - батник запускал руками пару раз и было нормально, но потом после обработки предыдущих, запустил еще один раз и он почти сожрал всю свободную оперативку (как я и опасался). Видимо как-то "накопительно" подействовало. Хотя первые два запуска были безболезненны. Пришлось почистить память через RamMap, а иначе бы сервер упал. :( Осталось 1080 папок грохнуть и поставить на поток. Вот только планировщик не хочет останавливать батник после обработки, так и висит в состоянии "Runing"

A что Вы хотите видеть?
»
уже ничего, буду частями удалять указав меньшее количество дней )

Iska
15-02-2020, 07:52
Один недостаток - в планировщик такое не вставишь. »
Я не дописал — это для первоначального удаления. Когда «надо удалить миллион папок и файлов». Однократное действие.

megaloman
15-02-2020, 10:23
Iska, У Вас есть соображения по этому поводу?Вобщем, ситуация такая - батник запускал руками пару раз и было нормально, но потом после обработки предыдущих, запустил еще один раз и он почти сожрал всю свободную оперативку (как я и опасался). »

Busla
15-02-2020, 10:45
Перечитал всю эту эпопею.

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

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

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

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

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

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

Удалить каталоги, у которых дата в имени старше трёх суток
Удалить каталоги у которых дата создания старше трёх суток.
Удалить всё, кроме трёх последних каталогов.

vombat2
15-02-2020, 13:47
Как минимум есть желание поучаствовать в обсуждении, поскольку задача так скажем не самая скучная, поддержу педыдущий топик, что немного не хватает конкретики и на м.взг. не помешал бы снимок, может быть скриншот, части целевого дерева каталогов.

Iska
15-02-2020, 21:26
Iska, У Вас есть соображения по этому поводу? »
Неа, я не глядел код.

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

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

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

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

20200212
20200213
20200214

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

20200213
20200214
20200217

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

megaloman
17-02-2020, 09:37
finderhd, А причем здесь название батника если имя батника совпадает с какой-нибудь программой/командой, то возможны коллизии. Лень разбираться - запустите сколько нужно раз батник ручками на удаление сравнительно небольшого количества дней, а в планировщик затем поместите самый простой скрипт. (http://forum.oszone.net/post-2909269-4.html)
А, еще лучше, вообще без бат-файла одну команду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"
Пути, естественно, за Вами

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

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

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

Busla
18-02-2020, 11:24
Так я ранее уже озвучил. Нужно удалять каталог вида YYYYMMDD за минусом трех дней. В выходные каталоги не создаются. »
вам стоило бы поправить своё первое сообщение, потому что озвучено там другое:
Нужно удалить все старые папки вместе с файлами, не трогая последние три. »

Работать с датами в батниках - занятие неблагодарное. Если делать по уму, то стоит писать это на PowerShell или WSH.

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

Busla
18-02-2020, 12:41
И три последние надо сохранить, даже не привязываясь к текущей дате »
нет

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

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

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

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

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




© OSzone.net 2001-2012