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

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

badman 08-01-2019 17:21 2850561

Удаление старых файлов-папок по дате изменения (change time)
 
Приветствую. Долго рылся в поисках решения, но в итоге потерпел фиаско.

Суть проблемы. Есть временная папка, куда сбрасывается разный хлам. Нужно рекурсивно удалять старые файлы/папки, например старше 30 дней. Таких скриптов-программ полно.
Проблема в том, что если извлечь файл из архива, дата создания-изменения-открытия выставляются из архива. Единственная дата, на которую можно ориентироваться, называется "Время изменения" (Change Time). В стандартном проводнике она не выводится, тем не менее, посмотреть её можно, например в фаре:
Скрытый текст

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

Перерыл кучу скриптов.
Forfiles.exe работает не с той датой. PowerShell, похоже, умеет только вот эти даты, и это первые три даты со скрина. Попробовал даже линуксовый find из cygwin, но он видимо вообще не умеет работать с NTFS датами файлов.

Подскажите, как можно работать с такой датой?

YuS_2 08-01-2019 18:02 2850580

Цитата:

Цитата badman
В стандартном проводнике она не выводится »

Почему не выводится?

Цитата:

Цитата badman
Как видно »

А вот не видно... ничего.
Цитата:

Цитата badman
Forfiles.exe работает не с той датой. »

С какой не той?
Цитата:

Цитата badman
PowerShell, похоже, умеет только вот эти даты »

Powershel легко работает с такими датами:
Код:

CreationTime,CreationTimeUtc,LastAccessTime,LastAccessTimeUtc,LastWriteTime,LastWriteTimeUtc
Цитата:

Цитата badman
работать с такой датой? »

С такой - это с какой именно?

badman 08-01-2019 18:36 2850584

Цитата:

Цитата YuS_2
Почему не выводится? »

Повторюсь, именно последняя дата со скрина фара не выводится нигде, я всё проклацал
Вот тот же файл в проводнике

Как видите, нигде нет 08.01.2019

Цитата:

Цитата YuS_2
Powershel легко работает с такими датами: »

Даты там всего 3 и они не отображают нужную, я проверил. *Utc не считаются, это просто время с часовым поясом UTC0

Код:

$_.Name + "`t`t" + $_.CreationTime + "`t" + $_.LastWriteTime + "`t" + $_.LastAccessTime
Цитата:

Цитата YuS_2
С такой - это с какой именно? »

Первый пост, скрин, "Время изменения"

YuS_2 08-01-2019 18:40 2850585

Цитата:

Цитата badman
Вот тот же файл в проводнике »

Цитата:

Цитата badman
Как видите »

Говорю же, ничего не видно, у этого хостинга левый сертификат, браузер отказывается отображать с него картинки :)

Цитата:

Цитата badman
Даты там всего 3 и они не отображают нужную, я проверил. »

плохо проверялось...

А удалить файлы по параметру времени последнего изменения:
Код:

$fld = 'd:\путь к временному каталогу'
dir -lit $fld -rec -file|?{$_.lastwritetime -lt (get-date).adddays(-30)}|del -force -rec

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

dir -lit $fld -dir -rec -force|?{(dir -lit $_.fullname -file -rec).length -eq 0}|del -rec -force
- эту строку надо добавить к скрипту удаления файлов...

Busla 08-01-2019 21:30 2850635

Цитата:

Цитата YuS_2
у этого хостинга левый сертификат »

нормальный там сертификат

Iska 09-01-2019 00:18 2850663

Цитата:

Цитата badman
Подскажите, как можно работать с такой датой? »

Стандартными средствами — не особо. Это не WinAPI, это NativeAPI: Свойства файла: Change time - forum.farmanager.com, NtQueryInformationFile function - Windows driver | Microsoft Docs_FILE_BASIC_INFORMATION - Windows driver | Microsoft Docs.

Цитата:

Цитата YuS_2
А вот не видно... ничего. »

У меня под Pale Moon видно. Там редирект ссылки файла изображения на облачное хранилище происходит.

YuS_2 09-01-2019 07:26 2850731

Цитата:

Цитата Busla
нормальный там сертификат »

Цитата:

Цитата Iska
Там редирект ссылки файла изображения на облачное хранилище происходит. »

Пояснения
Особо не разбирался... но FF выдал:
Цитата:

Ошибка при установлении защищённого соединения

При соединении с monosnap.com произошла ошибка. Узел получил действительный сертификат, но в доступе было отказано. Код ошибки: SSL_ERROR_ACCESS_DENIED_ALERT

Страница, которую вы пытаетесь просмотреть, не может быть отображена, так как достоверность полученных данных не может быть проверена.
Пожалуйста, свяжитесь с владельцами веб-сайта и проинформируйте их об этой проблеме.
Maxthon :
Цитата:

Недействительный сертификат

Сертификат этого сайта истёк или был выпущен для другого адреса.
Это может указывать на попытку перехвата данных между вами и удаленным сервером.
Проверьте, является ли URL в адресной строке правильным.

Код ошибки 117 (net::ERR_BAD_SSL_CLIENT_AUTH_CERT)
Мне этого хватило, чтобы плюнуть на тот хостинг... :)
Если бы проблема была у меня, мне, возможно, было бы интересно разобраться в возникающих ошибках, а так...

YuS_2 09-01-2019 10:34 2850749

Цитата:

Цитата Iska
Стандартными средствами — не особо. »

Кстати, если очень хочется именно changetime (хотя, лично я, не представляю зачем оно вообще нужно), для powershell есть модуль, от имени админа:
Код:

install-module psbasicinfo
затем:
Код:

(gi filename.ext|get-itembasicinfo).changetime
всё...

badman 09-01-2019 11:20 2850770

Цитата:

Цитата YuS_2
для powershell есть модуль, от имени админа:
install-module psbasicinfo »

что это за команда? не работает...

YuS_2 09-01-2019 12:06 2850785

Цитата:

Цитата badman
что это за команда? »

Код:

man install-module -full
Цитата:

Цитата badman
не работает... »

А это работает:
Код:

find-module psbasicinfo
?

megaloman 09-01-2019 12:20 2850792

Цитата:

Цитата badman
Forfiles.exe работает не с той датой. »

Цитата:

Цитата YuS_2
С какой не той? »

badman, Что Вы имеете ввиду? Прочел описание ForFiles, проверил, именно дата изменения. Другое дело, если в старую папку сегодня записать/удалить файл, дата изменения папки станет сегодняшняя.
Цитата:

Цитата YuS_2
Поэтому каталоги лучше удалять после чистки файлов и только пустые »

Код:

@Echo Off
        Set "BoxIn=Z:\Soft_In"

        Pushd "%BoxIn%"
        2>nul ForFiles /P "%BoxIn%" /M *.* /S /D -30 /C "cmd /c del "@path""
        For /F "usebackq delims=" %%i In (`2^>nul Dir "%BoxIn%" /B /S /A:D ^|Sort /R`) Do 2>nul Rd "%%i"
        Popd


YuS_2 09-01-2019 12:33 2850801

Цитата:

Цитата megaloman
For /F "usebackq delims=" %%i In (`2^>nul Dir "%BoxIn%" /B /S /A:D ^|Sort /R`) Do Rd "%%i" »

Да, удалит... все каталоги напрочь? :) Так вроде в задаче совсем не это было...
И к тому же, forfiles работает с обычным lastWriteTime, то бишь, при всём желании, ChangeTime в cmd достать не так просто...

megaloman 09-01-2019 12:39 2850806

YuS_2, Уже увидел и подправил код, чтобы не удалился исходный каталог. Rd без ключей /s /q не удалит непустой каталог.
Цитата:

Цитата badman
Есть временная папка, куда сбрасывается разный хлам. »

Сильно сомневаюсь, что пустые папки там зачем-то нужны. Это хлам.

YuS_2 09-01-2019 12:42 2850808

Цитата:

Цитата megaloman
Rd без ключей /s /q не удалит непустой каталог. »

это да... и тогда лучше:
Код:

... do >nul 2>&1 rd %%i
на всякий случай...

badman 09-01-2019 12:48 2850810

Цитата:

Цитата badman
что это за команда? не работает... »

разобрался, надо было обновить powershell и доставить модуль

megaloman 09-01-2019 13:16 2850820

YuS_2, До сих пор считал, что у файла 3 временнЫх атрибута (По крайней мере, доступных в WSH):
Дата создания (DateCreated)
Дата доступа (DateLastAccessed)
Дата изменения (DateLastModified)

YuS_2 09-01-2019 13:29 2850823

Цитата:

Цитата megaloman
у файла 3 временнЫх атрибута »

Файловую систему клепал микрософт - вчера три, завтра два, а позавчера восемь.. такшта, всё возможно. :)
Вот, выше, коллега Iska, приводил пруфлинки...

Цитата:

Цитата badman
надо было обновить powershell и доставить модуль »

Ну, тогда скрипт:
Код:

$fld = 'd:\путь к временному каталогу'
dir -lit $fld -rec -file -force|?{(gi -lit $_.fullname -force|get-itembasicinfo).changetime -lt (get-date).adddays(-30)}|del -force -rec
dir -lit $fld -dir -rec -force|?{(dir -lit $_.fullname -file -rec -force).length -eq 0}|del -rec -force


badman 09-01-2019 14:11 2850844

Всем спасибо, скрипт работает как надо

Iska 09-01-2019 18:44 2850940

Цитата:

Цитата megaloman
badman, Что Вы имеете ввиду? Прочел описание ForFiles, проверил, именно дата изменения. »

Это не та дата. Это не DateLastModified.

Цитата:

Цитата megaloman
YuS_2, До сих пор считал, что у файла 3 временнЫх атрибута (По крайней мере, доступных в WSH):
Дата создания (DateCreated)
Дата доступа (DateLastAccessed)
Дата изменения (DateLastModified) »

Так и есть — именно с этими тремя видами дата/время прямо или опосредованно работают функции WinAPI. Но в файловой системе NTFS есть ещё одно поле для даты-времени — ChangeTime (на FATxx, например, такого поля нет) — широко известный в определённых кругах Рэймонд Чен (Raymond Chen, на самом деле весьма знаковая фигура) в своём блоге поясняет (What’s the difference between LastWriteTime and ChangeTime in FILE_BASIC_INFO? – The Old New Thing):
Цитата:


The FILE_BASIC_INFO structure contains a number of fields which record the last time a particular action occurred. Two of the fields seem to describe the same thing.
Код:

    Last*Write*Time

        The time the file was last written to.

        Change*Time

            The time the file was changed.

What's the difference between writing to a file and changing it?

I'm told that the difference is metadata. The Last*Write*Time covers writes to the file's data stream (which you accomplish via the Write*File function). On the other hand, the Change*Time also includes changes to the file metadata, such as changing its file attributes (hidden, read-only, etc.) or renaming the file.

(And don't forget that Last*Access*Time updates are off by default now.)
Far Manager умеет работать с данным атрибутом файла (показывать, устанавливать, использовать при поиске, фильтрации и т.п.).

Цитата:

Цитата badman
Всем спасибо, скрипт работает как надо »

Вот так, совместными усилиями и запинали батьку ;).


Время: 14:02.

Время: 14:02.
© OSzone.net 2001-