上传文件到远程服务器并批量重命名

上传文件到远程服务器并批量重命名

我有大量文件,需要将它们上传到具有特定目的地的远程计算机。我有一张地图(可以重新组织)作为

1/1/1/file.jpg -> 2/3/4/image1.jpg
2/12/2/file.jpg -> 5/6/7/image2.jpg
3/31/31/file.jpg -> 8/9/1/image3.jpg

我可以想到两种解决方案:

上传到特定目的地

scp /folder/1/1/1/file.jpg user@ip:/dir/2/3/4/image1.jpg
scp /folder/2/12/2/file.jpg user@ip:/dir/5/6/7/image2.jpg
scp /folder/3/31/31/file.jpg user@ip:/dir/8/9/1/image2.jpg

但拥有数千个scp连接效率不高。

问题:如何使用类似的方法在一个连接中上传多个文件(为了速度)scp

使用rsync上传然后批量重命名

我可以使用 上传整个文件夹rsync到临时文件夹,速度相当快。然后,根据上图重命名文件。

问题:如何使用给定地图批量重命名?

答案1

第三种解决方案要求所有源文件都位于同一文件系统上,因此可以任意对任何文件进行硬链接。

将文件映射存储在 file 中filemap.txt

$ cat << EOF > filemap.txt
1/1/1/file.jpg -> 2/3/4/image1.jpg
2/12/2/file.jpg -> 5/6/7/image2.jpg
3/31/31/file.jpg -> 8/9/1/image3.jpg
EOF

然后使用此脚本创建一个名为 的临时输出目录,temp其中将包含与文件映射的目标路径匹配的子目录。每个源文件名将依次硬链接到目录下的正确目标路径temp。一旦temp完全填充,它将被rsync编辑到本地user:ip计算机,然后从本地计算机中删除。

#!/usr/bin/env bash

srcD="/folder/"
destD="/dir/"

rm   -rf temp

while read  src X dest
do

        dir="$(dirname "$dest")"

        mkdir -p "temp/$dir"
        ln "$srcD$src" "temp/$dest"

done < filemap.txt

rsync -av temp/ user@ip:"$destD"

rm -rf temp

相关内容