Я хочу удалить папки и их файлы были созданы более 7 дней с помощью командной строки.
2 ответа
* NIX
Если вы используете * nix и у вас есть find, это должно помочь:
find /the/directory/containing/files/to/delete -mtime +7 -exec rm -r {} \;
Флаг -mtime
предназначен для проверки метки времени изменения найденных файлов. Если это выше 7*24h
назад,
он выполнит rm /path/to/file
С man-страницы для find
-mtime n
File's data was last modified n*24 hours ago. See the comments
for -atime to understand how rounding affects the interpretation
of file modification times.
WINDOWS XP & VISTA
Я никогда не работаю с Windows, хотя мне стало любопытно посмотреть, какая команда будет эквивалентна приведенной выше в среде MS-DOS. Я нашел пакетный файл для удаления файлов старше N дней здесь в stackoverflow.
Соответствующая команда (копировать + вставить из ранее связанной ветки):
forfiles -p "C:\what\ever" -s -m *.* -d <number of days> -c "cmd /c del @path"
WINDOWS 7
Синтаксис немного изменился, поэтому обновленная команда
forfiles -p "C:\what\ever" -s -m *.* /D -<number of days> /C "cmd /c del @path"
Если вам нужно решить проблему ограничения пространства в очень большом файловом дереве (в моем случае это много веток выполнения), это иногда зависает при запуске процесса поиска и удаления -
Вот сценарий, который я планирую ежедневно находить во всех каталогах с определенным файлом («ChangesLog.txt»), а затем сортировать все найденные каталоги старше 2 дней и удалять первый соответствующий каталог (в каждом расписании может быть новое соответствие ):
bash -c "echo @echo Creating Cleanup_Branch.cmd on %COMPUTERNAME% - %~dp0 > Cleanup_Branch.cmd"
bash -c "echo -n 'bash -c \"find ' >> Cleanup_Branch.cmd"
rm -f dirToDelete.txt
rem cd. > dirToDelete.txt
bash -c "find .. -maxdepth 9 -regex ".+ChangesLog.txt" -exec echo {} >> dirToDelete.txt \; & pid=$!; sleep 100; kill $pid "
sed -e 's/\(.*\)\/.*/\1/' -e 's/^./"&/;s/.$/&" /' dirToDelete.txt | tr '\n' ' ' >> Cleanup_Branch.cmd
bash -c "echo -n '-maxdepth 0 -type d -mtime +2 | xargs -r ls -trd | head -n1 | xargs -t rm -Rf' >> Cleanup_Branch.cmd"
bash -c 'echo -n \" >> Cleanup_Branch.cmd'
call Cleanup_Branch.cmd
Обратите внимание на требования:
- Удаление только тех каталогов с помощью «ChangesLog.txt», так как другие старые каталоги не должны быть удалены.
- Вызов команд ОС в cygwin напрямую, так как в противном случае он использовал команды Windows по умолчанию.
- Сбор каталогов для удаления во внешний текстовый файл, чтобы сохранить результаты поиска, так как иногда процесс поиска зависал.
- Задание времени ожидания для процесса поиска с помощью & фонового процесса, который завершается через 100 секунд.
- Сортировка самых старых каталогов, для приоритета удаления.