Как удалить файлы старше N недель с FTP-сервера Microsoft

Я запускаю сервер OpenSuse, который каждую ночь загружает заархивированные резервные копии исходного кода на FTP-сервер Microsoft. Я написал сценарий Bash, который делает это с помощью задания cron.

Я хочу удалить файлы резервных копий старше определенной даты. Как я мог это сделать?


person Gerhard Wessels    schedule 21.11.2008    source источник
comment
Я настоятельно рекомендую добавить дату резервного копирования к имени файла резервной копии, особенно если FTP-сервер размещен на стороннем сервере. Если что-то испортило время файлов, вы можете случайно удалить не те файлы.   -  person Franci Penov    schedule 21.11.2008
comment
Я делаю! Это типичное имя файла - factory-hotcopy-Fri-14-Nov-2008-Rev574.zip. Я также вычисляю md5 для zip-файла, который сохраняется вместе с ним в сопроводительном текстовом файле.   -  person Gerhard Wessels    schedule 21.11.2008
comment
Если вы можете использовать Python, см. этот ответ в родственном вопросе.   -  person tzot    schedule 25.06.2010


Ответы (3)


Вы можете удалять файлы на FTP-сервере, используя FTP-команды delete или mdelete. Я не знаю, как выбрать старые файлы в качестве операции на стороне сервера, поэтому одним из вариантов было бы выполнить FTP ls, чтобы получить список файлов на сервере, а затем проанализировать вывод, чтобы выбрать те файлы, которые старше указанной вами даты. Затем удалите каждый с помощью команды FTP.

Если у вас есть локальная копия всех файлов, то, вероятно, проще сгенерировать список файлов локально, используя команду find, а затем удалить их по одному с сервера.

Если у вас есть некоторый контроль над FTP-сервером, то, вероятно, будет проще использовать rysnc вместо FTP.

person David Dibben    schedule 21.11.2008

Следующее удаляет все файлы в дереве каталогов с корнем в dir, время последнего изменения которых было до 1 ноября:

find dir -type f \! -newermt 2008-11-01 -exec rm '{}' \+

Формат даты / времени должен быть ISO 8601; Не знаю, принимаются ли другие форматы.

person Adam Rosenfield    schedule 21.11.2008
comment
Сервер, который я использую, похоже, не поддерживает команду Find - из приветствия похоже, что это NcFTPd. Это просто команда, которую не включил администратор, или я могу использовать что-то еще? - person SqlRyan; 12.12.2008

К сожалению, удалить старые файлы с FTP-сервера не так просто, как запустить find. -mtime +30 -delete, потому что обычно у вас нет доступа к оболочке FTP. Все надо делать через FTP.

Здесь представлен простой сценарий Perl, который делает свое дело. Требуется модуль Net::FTP.

person Luca Gibelli    schedule 09.10.2009
comment
Большое спасибо - это именно то, что я искал. - person Michael Pliskin; 09.03.2011