【问题标题】:FTP Delete local files if they no longer exist on remote serverFTP 如果本地文件不再存在于远程服务器上,则删除它们
【发布时间】:2013-12-19 16:15:21
【问题描述】:

如果远程目录中不再存在本地文件,是否可以使用下面的脚本删除它们?目前这会下载所有新文件,但不会删除 ftp 服务器上不再存在的文件?

@Echo Off

REM -- Define File Filter, i.e. files with extension .txt
set FindStrArgs=/x "..*\...*"
REM -- Extract Ftp Script to create List of Files
Set "FtpCommand=ls"
Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"
Rem Notepad "%temp%\%~n0.ftp"

REM -- Execute Ftp Script, collect File Names
Set "FileList="
For /F "Delims=" %%A In ('"Ftp -v -i -s:"%temp%\%~n0.ftp"|Findstr %FindStrArgs%"') Do (
    Call Set "FileList=%%FileList%% "%%A""
)

REM -- Extract Ftp Script to download files that don't exist in local folder
Set "FtpCommand=mget"
For %%A In (%FileList%) Do If Not Exist "%%~A" Call Set "FtpCommand=%%FtpCommand%% "%%~A""
Call:extractFileSection "[Ftp Script 1]" "-">"%temp%\%~n0.ftp"
Rem Notepad "%temp%\%~n0.ftp"

For %%A In (%FtpCommand%) Do Echo.%%A

REM -- Execute Ftp Script, download files
ftp -i -s:"%temp%\%~n0.ftp"
Del "%temp%\%~n0.ftp"

GOTO:EOF


:extractFileSection StartMark EndMark FileName -- extract a section of file that is defined by a start and end mark
::                  -- [IN]     StartMark - start mark, use '...:S' mark to allow variable substitution
::                  -- [IN,OPT] EndMark   - optional end mark, default is first empty line
::                  -- [IN,OPT] FileName  - optional source file, default is THIS file
:$created 20080219 :$changed 20100205 :$categories ReadFile
:$source http://www.dostips.com
SETLOCAL Disabledelayedexpansion
set "bmk=%~1"
set "emk=%~2"
set "src=%~3"
set "bExtr="
set "bSubs="
if "%src%"=="" set src=%~f0&        rem if no source file then assume THIS file
for /f "tokens=1,* delims=]" %%A in ('find /n /v "" "%src%"') do (
    if /i "%%B"=="%emk%" set "bExtr="&set "bSubs="
    if defined bExtr if defined bSubs (call echo.%%B) ELSE (echo.%%B)
    if /i "%%B"=="%bmk%"   set "bExtr=Y"
    if /i "%%B"=="%bmk%:S" set "bExtr=Y"&set "bSubs=Y"
)
EXIT /b

【问题讨论】:

    标签: batch-file ftp


    【解决方案1】:

    如果可能,请使用 ftp 客户端,例如 lftp。它将为您提供在一行代码中镜像两个 ftp 位置的选项(请参阅镜像选项)。还要检查标志:

    --only-newer
    --parallel=10
    --delete 
    

    【讨论】:

    • 谢谢,尽管使用当前脚本,但我需要将其放在批处理文件中。我需要在 100 台计算机上运行此脚本
    • cd ‹LOCALPATH›; lftp -u‹USER› -p‹PORT› -e 'mirror --only-newer --delete --verbose=3' sftp://‹HOSTNAME›/‹REMOTEPATH›/ 对我来说效果很好,可以删除远程上不存在的本地文件
    猜你喜欢
    • 1970-01-01
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多