На моем компьютере есть папка, в которой я храню временные файлы, которые через некоторое время мне не понадобятся. Я вручную удаляю их время от времени. Как это можно автоматизировать? Я могу подумать об удалении файлов, время последнего доступа которых превышает 20 минут с использованием Java, но, опять же, мне придется запускать их самому, что по-прежнему не будет автоматизацией. Я использую используя Windows и файловая система NTFS.
1 ответ
Если вы просто хотите удалить файлы через определенное количество минут без какой-либо продвинутой логики, сборка GNUWin32 команды Linux "найти" - это простая опция.
Настроить
- Загрузите текущие двоичные (findutils-4.2.20-2-bin) и зависимые (findutils-4.2.20-2-dep) .zip файлы на свой компьютер и распакуйте их как обычно.
- Скопируйте элементы из папки "bin" в "Зависимости" в папку "bin" в Binaries. Вы также можете скопировать элементы папки "manifest", но это не обязательно.
- В папке Binaries "bin" переименуйте find.exe во что-то другое (например, gnu_find.exe). Это предотвращает путаницу со встроенной в Windows командой "найти".
- Не стесняйтесь переименовывать / размещать папку Binaries так, как вы пожелаете.
использование
Удалить все файлы старше X минут (например, 5 минут) в данном каталоге (например, TempFiles)
gnu_find.exe "C:\Path\To\TempFiles" ! -mmin -5 -type f -delete
Обратите внимание, что! (отрицание) оператор важен. В противном случае файлы будут удалены в возрасте до (менее) X минут.
Опции
-имя может быть использовано для фильтрации элементов. -name должно всегда появляться перед -delete или это не будет иметь никакого эффекта, например
gnu_find.exe "C:\Path\To\TempFiles" ! -mmin -5 -type f -name "*text*" -delete
В приведенном выше примере -name соответствует любому файлу с последовательностью "текст" в любом месте имени файла (включая расширения). Используйте звездочку (*) для любой части, где требуется сопоставление с подстановочными знаками. Звездочки могут появляться более одного раза. Если соответствует точное имя, вы должны включить расширение в Windows.
-exec ex_command {} + позволяет использовать внешнюю команду, например "ex_command", когда найдены подходящие элементы. Это может быть полезно для запуска отдельного процесса (например, пакетного файла или аналогичного), когда "find" успешно соответствует элементам. Эта опция должна быть помещена в конце опций "найти", т.е.
gnu_find.exe "C:\Path\To\TempFiles" ! -mmin -5 -type f -delete -exec ex_command {} +
-delete является необязательным (как и все параметры). Вы можете отключить его, если хотите просмотреть, над чем будет работать "найти" (например, для тестирования или устранения неполадок), или просто хотите получить список файлов.
Имейте в виду, что если вы выводите список файлов для вывода, между именем каталога и именем файла будет помещена косая черта UNIX, например:
C:\Path\To\TempFiles/filename.txt
Поэтому вам может потребоваться принять соответствующие меры, чтобы исправить это позже.
Другие опции
Если вам нужны более изящные опции, чем перечисленные выше, вам, возможно, придется написать свой собственный скрипт.
Функции различаются в зависимости от языка, но, например, в Python есть time.time() (текущее время через модуль времени), а также os.path.getctime () и os.path.getmtime () (время создания Windows и изменение файла время соответственно через модуль ОС). Все они возвращают числа с плавающей запятой в секундах от времени эпохи и делают сравнение времени чрезвычайно простым.
Как вы упомянули Java, вы можете проверить этот вопрос StackOverflow на Java NIO для аналогичных функций.
автоматизация
Как упоминалось в комментариях, планировщик задач Windows можно использовать для периодического запуска элементов, в том числе один раз за X минут. Вы можете использовать его для запуска однострочного пакетного файла с помощью команды GNUWin32 "найти", описанной выше.
Вы можете установить приращения не более 1 минуты в настройках триггера для планировщика задач Windows 7. Вы должны ввести пользовательские приращения, например, 1 минуту вручную в раскрывающемся поле «Повторять задачу каждые:», в противном случае будет использоваться элемент из списка приращений по умолчанию.
Обратите внимание, что, хотя планировщик заданий может быть приемлемым, одна странность заключается в том, что он технически запускает задание в заданное время, а затем повторяет его в течение 24 часов. Это может привести к проблемам, если компьютер не включен, когда задание запущено.
Чтобы противостоять этому, необходимо включить «Настройки → Выполнить задачу как можно скорее после того, как запланированный запуск пропущен».
Другие варианты автоматизации
В качестве рекомендации, инструмент, похожий на UNIX-утилиту "cron", может быть предпочтительнее. Существует ряд лучших и худших эмуляций , но лично я предпочитаю IntelliAdmin Cron Service v2.0.
К сожалению, ссылка на веб-сайт на момент написания статьи не работает (она, похоже, больше не рассылает ссылки на бесплатные утилиты). Однако, если вы доверяете незнакомцам в Интернете, вы можете скачать их здесь.
IntelliAdmin Cron устанавливает простой сервис, который запускает перечисленные задачи через определенные промежутки времени, пока сервис работает. Он будет принимать файлы crontab для планирования, но также имеет графический интерфейс.
Следует отметить, что поля в интерфейсе GUI все еще ожидают записи в стиле crontab для определения времени выполнения. Вы можете исследовать это дальше, но формат для запуска каждые X минут
*/X
со всеми другими значениями, установленными на "*". Так что, если мы хотим запускать команду каждую минуту, это будет выглядеть так в интерфейсе: