Пакетное удаление файлов на FTP старше x дней - PullRequest
3 голосов
/ 09 марта 2012

Нашли несколько решений для локального, но нужно одно для действия FTP:

У меня есть ежедневный пакетный скрипт для локального резервного копирования баз данных MySQL, однако я также передаю их по FTP на сервер резервного копирования.

Локально я использую forfiles для удаления файлов старше 14 дней:

forfiles -p "C:\whatever" -s -m *.* -d 14 -c "cmd /c del @path"`

То же самое, что я хотел бы сделать на FTP, как только самые новые файлы резервных копий будут выгружены на FTP-сервер, работающий на Windows Server 2008.R2.

Как расширить пакетный файл для выполнения этого действия?

cd\[path to directory where files are saved] 
echo off
echo user [ftp username]>ftpup.dat
echo [ftp password]>>ftpup.dat
echo binary>>ftpup.dat
echo put [FullBackup.%backupdate%.zip]>>ftpup.dat
echo quit>>ftpup.dat
ftp -n -s:ftpup.dat [myserver.com]
del ftpup.dat

Ответы [ 2 ]

4 голосов
/ 27 июля 2016

Трудно реализовать с помощью встроенного ftp.exe, как показывает очень хороший ответ от @ PA. .

Вам лучше использовать более мощный сценариевый FTP-клиент стороннего производителя.


Например, * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * '*' * '*' '' '* ".

(я автор WinSCP)

4 голосов
/ 13 марта 2012
  1. захватить список файлов, которые вас интересуют

    echo user [ftp username]>ftpdir.txt
    echo [ftp password]>>ftpdir.txt
    echo dir . ftplist.txt >>ftpdir.txt
    echo quit>>ftpdir.txt
    ftp -n -s:ftpdir.txt [myserver.com]
    
  2. подготовить скрипт удаления ftp

    echo user [ftp username]>ftpdel.txt
    echo [ftp password]>>ftpdel.txt
    
  3. обработка списка

     for /f "tokens=6,7,8,*" %%a in (ftplist.txt) do (
        echo %%d
     )
    
  4. внутри цикла, извлеките дату файла.

    echo %%c %%a %%b - %%d
    

    и преобразовать название месяца в число

    call :month %%a
    

    Вы можете использовать процедуру, найденную в http://www.dostips.com/DtTipsStringManipulation.php

  5. внутри цикла, преобразовать дату в число дней с сегодняшнего дня

    call :days %%c %month% %%b
    

    это вызов подпрограммы, которая вычисляет дни с использованием алгоритма Флигеля-Ван Фландерна. См. Этот вопрос SO для получения подробной информации и реализации Как проверить создание метки времени для файла в пакетном скрипте Windows?

  6. и, наконец, внутри цикла, сравните полученное число, если оно больше, чем, скажем, 14, добавьте файл в файлы для удаления сценария ftp

    IF !days! GEQ 14 echo DEL %%d >>ftpdel.txt
    
  7. закончить скрипт ftp del и выполнить его

    echo quit>>ftpdel.txt
    ftp -n -s:ftpdel.txt [myserver.com]
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...