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

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

Ответить
Настройки темы
PowerShell - [решено] Перенос файлов старше N дней

Старожил


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

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


Доброго времени суток!
Накидал скрипт из пары строк, который должен пройтись по папки и если к файлу последний раз обращались больше чем N дней, он переносится в др папку, но скрипт не работает не поминая почему... Если указывать сравнение "ge", то он начинает всё(!) переносить, если "le" (по идее то что мне и надо), вообще ничего не происходит. Подскажите пожалуйста в чём ошибся?

Код: Выделить весь код
cls
$path = "D:\other\test1"
$dest = "D:\other\test"

Get-ChildItem $path | where { $_.LastAccessTime -le ((Get-Date).AddDays(-5)) } | Move-Item -Destination $dest
Заранее спасибо!

Отправлено: 10:21, 15-08-2014

 

Старожил


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

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


Честно говоря затрудняюсь ответит...
Просто есть папка гигов в 200, в которой огромная количество папок и файлов в жуткой структуре подпапок.
Мне надо найти ВСЁ что старше N дней\месяцев и перенести оттуда в другую папку с сохранением структуры папок. Т.е. если кому-нибудь понадобится получить файл за 2010 год из этого ужаса, то можно узнать путь где он лежал и вытащить его из папки куда он был перемещён ($dest) по такому же пути (ну понятное дело что сменится корневая папка или диску куда это всё перенесется, но смысл я думаю поняте)

Отправлено: 11:49, 15-08-2014 | #11



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

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


Старожил


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

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


Ещё вариантов решения проблемы никто не подскажет?

Отправлено: 08:53, 18-08-2014 | #12


Старожил


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

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


Задачу решил следующими костылями:

скрипт 1 - перенос всех файлов старше N дней:

Код: Выделить весь код
$days = 120
$path = "D:\data"
$dest = "D:\temp"

Get-ChildItem $path -Recurse | where { $_.LastAccessTime -le ((Get-Date).AddDays(-120)) -and !$_.PsIsContainer } | Move-Item -Destination { md $_.DirectoryName.Replace("$path","$dest") -force }
После переноса файлов, структура каталогов в папке-источнике сохраняется.
Т.к. в этой папке и всех её подпапках были изображения, то так же в папке был скрытый файл Thumbs.db. Автоматически его удалить не получилось, ни powershell, ни vbs, ни cmd не смогли удалить их, по этому удалил их через поиск.

скрипт 2 - удаление всех пустых каталогов:

Код: Выделить весь код
#$path = "D:\data"
#dir -Path $path -Recurse | ?{$_.psiscontainer} | sort pspath -Descending | ?{!$ExecutionContext.InvokeProvider.ChildItem.HasChild($_.pspath)} | del
или так
Код: Выделить весь код
$path="D:\data";
$EmptyFolders = ls $path -Recurse | ?{
  (ls -Path $_.FullName -Recurse -Force | ?{
    $_.PSIsContainer -eq $false
  }) -eq $null
};
if ($EmptyFolders -ne $null) {
  $EmptyFolders | %{
    if (Test-Path $_.FullName) {
      $_ | ri -Recurse
    }
  }
}

Последний раз редактировалось pogo, 18-08-2014 в 17:07.


Отправлено: 12:44, 18-08-2014 | #13

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата pogo:
Автоматически его удалить не получилось, ни powershell, ни vbs, ни cmd не смогли удалить их »
Поставьте в скрипт команду сброса атрибутов -r, -h, -s для всех (чтобы не мудрствовать лукаво) файлов. После этого удаление пойдёт.

-------
Mikhail Zhilin


Отправлено: 19:33, 18-08-2014 | #14


Старожил


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

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


Цитата mwz:
Поставьте в скрипт команду сброса атрибутов -r, -h, -s для всех (чтобы не мудрствовать лукаво) файлов. После этого удаление пойдёт. »
можно поточнее о какой команде и для какого языка идет речь? буду очень признателен.

Отправлено: 09:27, 19-08-2014 | #15

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата pogo:
можно поточнее о какой команде и для какого языка идет речь? »
В любом языке обязана быть команда работы с атрибутами файла (r, т.е. read only; s, т.е. system, h, т.е. hidden -- ну и непринципиальный (как правило) a): их сброс и установка. Даже в DOS-3 была (и до сих пор существует в cmd.exe и может быть использована в командных и пакетных файлах), например attrib -r <имя_файла> -- сброс атрибута rеad-only ("только для чтения") у файла, attrib +s <имя_файла> -- установка атрибута system ("системный"), attrib -s -h -r <имя_файла> -- одновременный сброс атрибутов "Системный", "Скрытый", "Только для чтения".

Поэтому я и дал чисто общую рекомендацию: надо смотреть, как это конкретно реализуется в языке, который вы используете.

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

-------
Mikhail Zhilin


Последний раз редактировалось mwz, 19-08-2014 в 12:09.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:03, 19-08-2014 | #16


Старожил


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

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


Теперь понял.
Спасибо. Попробую посмотреть что с этим можно сделать в powershell, раз уж всё на нём сделано

Отправлено: 16:49, 19-08-2014 | #17



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2012 R2 - [решено] Удаление файлов старше 100 дней DJ Mogarych Windows Server 2012/2012 R2 6 07-06-2014 02:16
Любой язык - [решено] Удаление файлов старше N дней DOCznet Скриптовые языки администрирования Windows 2 27-09-2012 11:42
VBS/WSH/JS - [решено] Удаление файлов по сети старше 7 дней, оставлять не менее 10 файлов white155 Скриптовые языки администрирования Windows 6 04-01-2012 00:42
[решено] Автоочистка файлов, старше 5 дней. Universal_gr Программное обеспечение Linux и FreeBSD 1 01-10-2010 01:12
Прочее - удаление файлов старше 10 дней admin666 Общий по Linux 1 23-07-2009 19:09




 
Переход