使用 wget 进行镜像 - 排除旧文件

使用 wget 进行镜像 - 排除旧文件

我正在使用 wget 来镜像 ftp 文件档案。

这是我的命令:(
wget -m $mirror
删除所有不必要的参数)

到目前为止,一切都正常,与在线档案的所有差异都将被同步。

但现在,有一个脚本会从我的副本中删除不需要的文件。因此,如果我再次启动 wget,它也会重新下载这些文件(几 GB!)。

是否有选项可以从下载中排除早于特定时间戳的文件?

我已经查看了-A -R -I -X参数,但它们似乎只适用于文件名......

答案1

读到你的问题时,我的第一个念头是“这看起来像是 的工作rsync!”。不幸的是,虽然它rsync确实可以一跃而过高楼,但它无法处理 FTP。如果你有镜像的 ssh 访问权限,事情就会容易得多。

假设你没有,你可以尝试在本地挂载远程 FTP 目录,然后你可以使用简单的cp(灵感来自):

  1. 安装 curlftpfs。如果你使用的是基于 Debian 的发行版(我假设你使用的是 Linux,因为你提到了wget),请运行

    apt-get install curlftpfs 
    
  2. 创建本地挂载路径

    mkdir -p /mnt/myftp
    
  3. 使用以下方式挂载目标 ftp 站点curlftpfs

    curlftpfs -o allow_other ftp://user:[email protected] /mnt/myftp
    
  4. 用于cp复制文件,并将命令find作为参数传递:

    cd /mnt/myftp && \
    cp -v --parents `find . -type f -mtime -20` ~/foo/
    

解释:

  • 命令find将查找所有文件-type f)在远程 FTP 服务器中修改的时间 <=20 天前(-mtime 20)。
  • cp命令将复制这些文件
    • 如果它们比目标目录中的相应文件更新(-u
    • 保留其父目录(--parents
  • cd /mnt/myftp位是必需的,以便cp在目标文件夹中创建正确的父目录。如果您不cd先进入 ftp 目录,cp将创建如下文件夹:

    ~/foo/mnt/myftp/bar
    

    而不是这样:

    ~/foo/bar
    

结合起来,这些命令/选项应该具有镜像远程服务器同时忽略旧文件的预期效果。

注意事项:

这是一个相对简单的案例。如果您有更高级的要求(所有wget您遗漏的选项),您可能需要查看,man cp或者,对于更高级的选项,man rsync。您将能够通过使用 的选项传递命令的结果来执行基本相同的rsync操作。findrsync--include-from

如果您用更具体的要求(保留链接、硬链接、时间戳、用户权限、目录递归等)更新您的问题,我应该能够修改我的答案以适合它们。

相关内容