【问题标题】:Batch - FTP delete folders older than批处理 - FTP 删除早于
【发布时间】:2016-08-15 17:29:57
【问题描述】:

我家有两个摄像头,几乎每天都在创建图像。他们将它们保存到我的 FTP 服务器(Fritz.Box\Nas 驱动器)。

文件夹结构如下:

+-2016-08-24
+-+Subfolder
+----+AnotherSubfolder
+-------+File.jpg
+-2016-08-25
+-+Subfolder
+----+AnotherSubfolder
+-------+File.jpg
+-2016-08-26
+-+Subfolder
+----+AnotherSubfolder
+-------+File.jpg
...

现在我可以像这样通过批处理文件(在 Windows 上)登录到我的 FTP:

echo user foo>ftpcmd.txt
echo 1234>>ftpcmd.txt
... CODE HERE ...
echo quit>>ftpcmd.txt
ftp -n -s:ftpcmd.txt foo.com

在 Windows 上,我会通过

删除 2 天前的本地文件
forfiles /d -2 ...

在 FTP 上它不起作用。那么,如何删除超过 2 天的文件夹 AND SUBFOLDERS/SUBFILES?

我知道这个问题:Batch delete files on FTP older than x days

但我无法为我找到一个好的解决方案。同样,我想要一个批处理文件,根据日期检查文件夹(例如:2016-08-24) - 2 天并删除它们及其子目录和子文件。

希望这不是垃圾邮件问题,因为还有一个问题几乎相同。

问候
德克

【问题讨论】:

    标签: windows batch-file ftp


    【解决方案1】:

    ftp.exe 不支持此功能。您必须运行一次ftp.exe 才能获得文件夹列表。然后你必须编写一些非常漂亮的批处理脚本来处理列表,选择旧文件夹,并生成一个临时删除脚本。然后你会发现ftp.exe无论如何都不支持递归删除。

    如果您不想依赖任何第 3 方,那么使用 PowerShell(和 FtpWebRequest 类)会更幸运。虽然它仍然很难实现(同样不支持递归删除)。


    不过,如果文件夹具有与其名称匹配的修改时间戳,则使用 WinSCP FTP client 很容易。

    您可以像这样使用批处理文件 (.bat):

    winscp.com /ini=nul /log=ftp.log /command ^
        "open ftp://username:password@ftp.example.com/" ^
        "rm /remote/path/*<2D" ^
        "exit"
    

    参考资料:


    如果你必须只依赖文件名,那就更棘手了。

    虽然您可以轻松编写脚本来删除 2 天前的文件夹:

    您可以像这样使用批处理文件:

    winscp.com /ini=nul /log=ftp.log /command ^
        "open ftp://username:password@ftp.example.com/" ^
        "rm /remote/path/%%TIMESTAMP-2D#yyyy-mm-dd%%" ^
        "exit"
    

    如果您schedule the script to be run every day,您将有效地只保留过去两天的文件夹。

    参考:%TIMESTAMP% syntax


    WinSCP does not require to be installed。要使批处理工作,您只需在批处理文件中提取 WinSCP portable executables package 的内容即可。


    (我是 WinSCP 的作者)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多