4

Я хочу удалить папки и их файлы были созданы более 7 дней с помощью командной строки.

2 ответа2

12

* 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"
0

Если вам нужно решить проблему ограничения пространства в очень большом файловом дереве (в моем случае это много веток выполнения), это иногда зависает при запуске процесса поиска и удаления -

Вот сценарий, который я планирую ежедневно находить во всех каталогах с определенным файлом («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

Обратите внимание на требования:

  1. Удаление только тех каталогов с помощью «ChangesLog.txt», так как другие старые каталоги не должны быть удалены.
  2. Вызов команд ОС в cygwin напрямую, так как в противном случае он использовал команды Windows по умолчанию.
  3. Сбор каталогов для удаления во внешний текстовый файл, чтобы сохранить результаты поиска, так как иногда процесс поиска зависал.
  4. Задание времени ожидания для процесса поиска с помощью & фонового процесса, который завершается через 100 секунд.
  5. Сортировка самых старых каталогов, для приоритета удаления.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .