仅镜像文件路径中具有特定字符串的文件

时间:2014-01-08 03:57:53

标签: regex wildcard wget mirroring lftp

我正在尝试仅镜像目录树中那些在分支中某处包含特定目录名的分支。我花了几个小时尝试不同的事情无济于事。

远程FTP站点的目录结构如下:

image_db
  movies
    v2
      20131225
        xyz
          xyz.jpg
      20131231
        abc
          abc.jpg
      AllPhotos   <-- this is what I want to mirror
        xyz
          xyz.jpg
        abc
          abc.jpg
    v4
      (similar structure to 'v2' above, contains 'AllPhotos')
    ...
  tv_shows
    (similar structure to 'movies', contains 'AllPhotos')
  other
    (different paths, some of which contain 'AllPhotos')
  ...

我正在尝试创建一个只有'AllPhotos'目录的本地镜像,其父路径保持不变。

我尝试过各种变体:

lftp -e 'mirror --only-newer --use-pget-n=4 --verbose -X /* -I AllPhotos/ /image_db/ /var/www/html/mir_images' -u username,password ftp.example.com

...其中“-X / *”排除所有目录,“ - I AllPhotos /”仅包括AllPhotos。这不起作用,lftp只复制一切。

我也试过这个变种:

lftp -e 'glob -d -- mirror --only-newer --use-pget-n=4 --verbose /image_db/*/*/AllPhotos/ /var/www/html/mir_images' -u username,password ftp.example.com

...而且lftp在远程目录结构上匆匆而不实际创建任何东西。

基本上,我想只镜像那些在完整目录路径中某处有字符串'AllPhotos'的文件。

更新1:

如果我可以使用wget,rsync,ftpcopy或者除了lftp之外的其他一些实用程序,我欢迎有关替代方案的建议。

尝试wget对我来说也不起作用:

wget -m -q -I /image_db/*/*/AllPhotos ftp://username:password@ftp.example.com/image_db

...它只是获取整个目录结构,即使wget文档说在-I路径中允许使用通配符。

更新2:

经过进一步调查后,我得出的结论是,我应该编写自己的镜像实用程序,虽然我仍然怀疑我正以错误的方式接近lftp,而且有一种方法可以使它只镜像具有特定功能的文件绝对路径中的字符串。

1 个答案:

答案 0 :(得分:0)

一个解决方案:

curl -s 'ftp://domain.tld/path' |
    awk '/^d.*regex/{print $NF}' |
    xargs wget -m ftp://domain.tld/path/

或使用lftp

lftp -e 'ls; quit' 'ftp://domain.tld/path' |
    awk '/^d.*regex/{print $NF}' |
    xargs -I% lftp -e "mirror -e %; quit" ftp://domain.tld/path/