Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Удаление самых старых файлов в папке если их вес превысил 200 гб (http://forum.oszone.net/showthread.php?t=348984)

Lande 11-06-2021 03:10 2960003

Удаление самых старых файлов в папке если их вес превысил 200 гб
 
Здравствуйте!
Помогите со скриптом, который будет удалять самые старые файлы и папки по директории, если их общий вес превысил 200 гб, так же он должен останавливаться удалять файлы когда общий вес достиг 200 гб и меньше.
Буду признателен за помощь!

DJ Mogarych 11-06-2021 09:09 2960019

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 2960158

Вложений: 1
DJ Mogarych, в какой версии PS работает Ваш код?

alpap 13-06-2021 17:08 2960167

в 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 2960170

Вложений: 1
alpap, У меня хуже.

DJ Mogarych 13-06-2021 19:50 2960186

megaloman, 5.1. Но у вас ругается на права.

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

greg zakharov 13-06-2021 20:17 2960188

Цитата:

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

Ничего странного: выбирается последний элемент в иерархии. По идее нужно "раскручивать" вложенность, либо сделать удаление последовательным (принцип "изнутри наружу"). Для наглядности принцип "раскручивания":
Код:

(ls X:\Path -r -di|sort FullName -de).ForEach{if (!(ls $_.FullName).Count) {ri $_.FullName -fo}}
Иными словами, нужно отсортировать в порядке вложенности: от наиболее дальнего к корню.

megaloman 13-06-2021 21:06 2960192

DJ Mogarych,
Цитата:

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

DJ Mogarych 14-06-2021 20:44 2960271

Может быть, надо добавить к del какое-то сочетание ключей
Код:

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

alpap 14-06-2021 23:13 2960285

предупреждение выдает если попадаются системные и скрытые файлы и еще переспрашивает перед этим, точно удалять или нет.

DJ Mogarych 15-06-2021 09:37 2960310

Тогда добавьте
Код:

-Force -Confirm:$false
https://docs.microsoft.com/en-us/pow...powershell-7.1

greg zakharov 15-06-2021 20:26 2960344

DJ Mogarych, вообще, предпочтительней снимать соответствующие атрибуты с файлов.


Время: 22:46.

Время: 22:46.
© OSzone.net 2001-