Вопрос: Как удалить папки и файлы, которые были старше 7 дней в командной строке?


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


4
2017-12-11 05:07


Источник


На какой ОС (Win, OSx Linux? Я предполагаю Linux, но вы знаете, что они говорят о допущениях. - Steve Robillard
sevenforums.com/tutorials/...
Я не уверен, как вы будете делать 7-дневную часть, но если вы используете OS X или Linux, вы можете использовать команду: rm -rf / path / to / the / folder - nosedive25
ва c махмуд. вы хотите создать скрипт, который удаляет файлы до 7-го дня? и в какой операционной системе?!
В окнах и папках, которые я хочу удалить, называется: 200110001,20110002 .. и т. Д., Только папка начинается с «2011 ...», которую я хочу удалить


Ответы:


* NIX

Если вы используете * nix и имеете найти доступно это должно сделать трюк:

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

Я никогда не работаю над окнами, хотя мне было любопытно узнать, какая команда должна быть эквивалентна приведенной выше в среде 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"

11
2017-12-11 05:17



Rm требует, чтобы флаг -r удалял каталоги, если я правильно помню. (UNIX)
@Jon О, я не заметил, что это было требование удалить как каталоги, так и файлы, я сразу же изменю свой пост. Спасибо за указание на это!
И, чтобы быть уверенным, он также должен использовать флаг -f, поэтому -rf всегда будет принудительно удалять. (забыли это).
@ Jon я оставил это специально, чтобы быть честным, лучше безопасным, чем жаль! ;)
refp, большое спасибо за ваш ответ, «forfiles» будет работать в окнах?


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

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

0