首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文件上载到远程服务器和批重命名

将文件上载到远程服务器和批重命名
EN

Unix & Linux用户
提问于 2021-04-23 20:49:43
回答 1查看 257关注 0票数 0

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

代码语言:javascript
复制
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

我能想到两种解决方案:

Uploading到特定目的地

代码语言:javascript
复制
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的Uploading,然后批重命名

我可以上传整个文件夹与rsync,这是相当快,到一个临时文件夹。然后,根据上面的地图重命名这些文件。

问:如何用给定的地图批次重命名?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-04-23 22:06:31

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

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

代码语言:javascript
复制
$ 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,然后从本地机器中删除。

代码语言:javascript
复制
#!/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
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/646456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档