Лучший отвечающий
Поиск папки по имени и удаление ее содержимого старше нескольких дней

Вопрос
-
Всем привет. Помогите скриптом, пожалуйста. Есть папки с номерами пользователей (от 101 до 200). В каждой из них есть папка MT. Необходимо удалять содержимое этой папки старше 7 дней. Есть у кого решение?3 октября 2018 г. 7:39
Ответы
-
ох тыж блин у вас же со 101 начинается!
ls -path c:\temp\test\1[0-9][0-9]\md\*,c:\temp\test\200\md\* -exclude c:\temp\test\100|? -Property lastwritetime -le (get-date).AddDays(-7)|del -force -WhatIf
и
101..200|%{ls c:\temp\test\$_\md\*|? -Property lastwritetime -le (get-date).AddDays(-7)|del -force -WhatIf}
- Изменено Svolotch 3 октября 2018 г. 13:05
- Помечено в качестве ответа Vector BCOModerator 5 октября 2018 г. 6:19
3 октября 2018 г. 12:34
Все ответы
-
ls -path c:\temp\test\1[0-9][0-9]\md\*,c:\temp\test\200\md\*|? -Property lastwritetime -le (get-date).AddDays(-7)|del -force -WhatIf
ну это если % не юзать... с ним короче строчечка, но я не люблю его без нужды юзать :-)
100..200|%{ls c:\temp\test\$_\md\*|? -Property lastwritetime -le (get-date).AddDays(-7)|del -force -WhatIf}
если в папке md есть подпапки с файлами - тогда в ls еще -Recurse воткните...
если только файлы нужны -File
и осторожнее с параметром -конфирм(специально не ставил) для удаления, можно грохнуть старую папку с новыми файлами.
З.Ы. это повершелл
- Изменено Svolotch 3 октября 2018 г. 12:32
3 октября 2018 г. 12:14 -
ох тыж блин у вас же со 101 начинается!
ls -path c:\temp\test\1[0-9][0-9]\md\*,c:\temp\test\200\md\* -exclude c:\temp\test\100|? -Property lastwritetime -le (get-date).AddDays(-7)|del -force -WhatIf
и
101..200|%{ls c:\temp\test\$_\md\*|? -Property lastwritetime -le (get-date).AddDays(-7)|del -force -WhatIf}
- Изменено Svolotch 3 октября 2018 г. 13:05
- Помечено в качестве ответа Vector BCOModerator 5 октября 2018 г. 6:19
3 октября 2018 г. 12:34 -
ну вот как то так3 октября 2018 г. 13:08
-
Попробовал оба варианта, ругается на Property
Where-Object : Не удается найти параметр, соответствующий имени параметра "Property".
+ CategoryInfo : InvalidArgument: (:) [Where-Object], ParameterBindingException
+ FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.WhereObjectCommand
5 октября 2018 г. 14:03 -
а так?
101..200|%{ls c:\temp\test\$_\md\*|? {$_.lastwritetime -le (get-date).AddDays(-7)}|del -force -WhatIf}
5 октября 2018 г. 14:25 -
Выводит сообщение:
WhatIf: Выполнение операции "Удаление каталога" над целевым объектом "C:\...."
но не удаляет, ни папки, ни их содержимое.
- Изменено sanguinik 8 октября 2018 г. 6:28
8 октября 2018 г. 6:13 -
Выводит сообщение:
WhatIf: Выполнение операции "Удаление каталога" над целевым объектом "C:\...."
но не удаляет, ни папки, ни их содержимое.
The opinion expressed by me is not an official position of Microsoft
8 октября 2018 г. 6:37Модератор -
Большое спасибо, ушел читать справку8 октября 2018 г. 6:48
-
101..200 - последовательно передаем в конвейер набор чисел от 101 до 200
%{ls c:\temp\test\$_\md\* - делаем dir(get-childitem он же ls) для каждой папки и получаем список файлов в директории MD, если предполагается что в директории есть подпапки с файлами которые тоже надо обработать тогда лучше подставить ключи ls c:\temp\test\$_\md\* -File -Recurse (забирать только обьекты файлов, а не каталогов). ключик файл есть не во всех версиях повершелла
? {$_.lastwritetime -le (get-date).AddDays(-7)} - фильтруем список обьектов по атрибуту lastwritetime
del -force -WhatIf} даем команду на удаление, специально поставил ключ -whatif который вместо удаления просто пишет операцию которая технически должна произойти
9 октября 2018 г. 8:50 -
А оставшиеся пустые папки как удалить?11 октября 2018 г. 11:27
-
это какие?11 октября 2018 г. 11:38
-
После удаления в директории MD остаются пустые папки11 октября 2018 г. 12:11
-
добавьте потом строчку
while($empties=ls -path c:\temp\test\1[0-9][0-9]\md\*,c:\temp\test\200\md\* -exclude c:\temp\test\100 -recurse -Directory | Where{$_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count -eq 0 }){$empties|Remove-Item -force}
учтите будут удалятся ВСЕ пустые каталоги внутри c:\temp\test\от101до200\md\*
11 октября 2018 г. 13:28 -
Ругается : "Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "Directory"."12 октября 2018 г. 5:47
-
Ругается : "Get-ChildItem : Не удается найти параметр, соответствующий имени параметра "Directory"."
обновите powershell
у вас стоит 2 версия, а доступна вам 5
The opinion expressed by me is not an official position of Microsoft
- Изменено Vector BCOModerator 12 октября 2018 г. 6:50
12 октября 2018 г. 6:07Модератор -
while($empties=ls -path c:\temp\test\1[0-9][0-9]\md\*,c:\temp\test\200\md\* -exclude c:\temp\test\100 -recurse | Where{$_.Psiscontainer -eq 1 -and
$_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count -eq 0 }){$empties|Remove-Item -force}вроде както так, проверьте предварительно на кошках.
вот так с логгированием:
while($empties=ls -path c:\temp\test\1[0-9][0-9]\md\*,c:\temp\test\200\md\* -exclude c:\temp\test\100 -recurse | Where{$_.Psiscontainer -eq 1 -and $_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count -eq 0 }){echo "deleting $empties";$empties|Remove-Item -force}
учтите что скрипт проходит в цикле, как бы не повис где случаем, хотя вроде не должен.
- Изменено Svolotch 12 октября 2018 г. 6:44
12 октября 2018 г. 6:35