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



我试图只镜像目录树中包含特定目录名的分支。我花了几个小时尝试不同的东西,但都无济于事。

远程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,并且有一种方法可以使它只镜像绝对路径中有特定字符串的文件。

一个解决方案:

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/

相关内容

  • 没有找到相关文章

最新更新