从远程下载图像以及本地列表

从远程下载图像以及本地列表

我在文件(本地)中有一个图像列表images.txt,其中包含相对图像路径,如下所示:

a/b/abc.jpg
a/b/abcd.jpg
1/2/123.jpg
1/2/1234.jpg
...

我只想从远程下载那些图像,保留文件夹结构。
我尝试使用该命令作为

cd /path/to/my/project
scp -rv user@remote-host:/var/www/domain.com/public_html/assets/media/{"$(cat images.txt | tr '\n' ',' | sed 's/,$//')"} ./assets/media

但它直接下载目录下的所有图像,./assets/media而不是各个文件夹(例如:a/b1/2等)。

如何修改命令?可能正在使用rsyncscp

答案1

我会使用rsync或循环scp,具体取决于可用的内容:

while IFS= read -r file
do
    mkdir -p "assets/media/${file%/*}"
    scp -pv user@remote-host:"/var/www/domain.com/public_html/assets/media/$file" assets/media
done <images.txt

使用 just 的问题scp是,源路径对应的目录不会自动创建,所以我们必须显式创建它们。

我的首选工具更有可能是rsync,它可以通过一个命令处理所有这些

rsync -avR --files-from images.txt user@remote-host:/var/www/domain.com/public_html/assets/media/ assets/media

这里的“魔法”是-R标志,它告诉rsync我们将列出的源路径images.txt不仅相对于源,而且还相对于目的地。这样/var/www/domain.com/public_html/assets/media/a/b/abc.jpg就会从远程系统复制到assets/media/a/b/abc.jpg本地。


作为事后的想法,评论询问了如果文件名列表位于数组中,如何处理它们。这就是我可能会做的

printf "%s\0" "${files[@]}" |
    rsync -avR --files-from - --from0 user@remote-host:/var/www/domain.com/public_html/assets/media/ assets/media

相关内容