PDA

Показать полную графическую версию : Удаление самых старых файлов в папке если их вес превысил 200 гб


Lande
11-06-2021, 03:10
Здравствуйте!
Помогите со скриптом, который будет удалять самые старые файлы и папки по директории, если их общий вес превысил 200 гб, так же он должен останавливаться удалять файлы когда общий вес достиг 200 гб и меньше.
Буду признателен за помощь!

DJ Mogarych
11-06-2021, 09:09
powershell

$folder = "D:\folder"
$currentSize = (dir "$folder" -file -Recurse -OutVariable files |measure -Sum length).sum
$targetSize = 200 * 1GB

if ($currentSize -gt $targetSize) {
$diff = $currentSize - $targetSize
$files = $files |sort lastwritetime
$c = 0
do {
$toDel = $toDel + ($files[$c]).length
$c++
} until ($toDel -gt $diff)

$files |select -First $c |del
dir "$folder" -Directory -Recurse |? {(dir "$($_.fullname)").count -eq 0} |del
}

megaloman
13-06-2021, 16:26
DJ Mogarych, в какой версии PS работает Ваш код?

alpap
13-06-2021, 17:08
в 7.1.3 работает четко, но выбивает

Line |
16 | … der" -Directory -Recurse |? {(dir "$($_.fullname)").count -eq 0} |del
| ~~~
| Directory C:\A\WindowsPowerShell\Modules\WindowsPSModulePath\1.0.0 cannot be
| removed because it is not empty.

самОй работе не мешает

megaloman
13-06-2021, 17:29
alpap, У меня хуже.

DJ Mogarych
13-06-2021, 19:50
megaloman, 5.1. Но у вас ругается на права.

alpap, вот это странно, т. к. проверяет же на наличие объектов.

greg zakharov
13-06-2021, 20:17
вот это странно, т. к. проверяет же на наличие объектов.Ничего странного: выбирается последний элемент в иерархии. По идее нужно "раскручивать" вложенность, либо сделать удаление последовательным (принцип "изнутри наружу"). Для наглядности принцип "раскручивания":
(ls X:\Path -r -di|sort FullName -de).ForEach{if (!(ls $_.FullName).Count) {ri $_.FullName -fo}}
Иными словами, нужно отсортировать в порядке вложенности: от наиболее дальнего к корню.

megaloman
13-06-2021, 21:06
DJ Mogarych, 5.1. Но у вас ругается на права.я наваял решение задачи на vbs, оно длинное и медленное (не привожу, если кто-то запросит, размещу), но на права не ругается. Что-то в консерватории не то. Возможно, из-за скрытых ини-файлов.

DJ Mogarych
14-06-2021, 20:44
Может быть, надо добавить к del какое-то сочетание ключей
-Recurse -Force -Confirm:$false

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

alpap
14-06-2021, 23:13
предупреждение выдает если попадаются системные и скрытые файлы и еще переспрашивает перед этим, точно удалять или нет.

DJ Mogarych
15-06-2021, 09:37
Тогда добавьте

-Force -Confirm:$false


https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/remove-item?view=powershell-7.1

greg zakharov
15-06-2021, 20:26
DJ Mogarych, вообще, предпочтительней снимать соответствующие атрибуты с файлов.




© OSzone.net 2001-2012