从源和目标中scp具有不同名称的多个文件

时间:2017-01-13 10:55:06

标签: linux bash file scp

我正在尝试从源到目标scp多个文件。场景是源文件名与目标文件不同

这是我想要做的SCP命令

scp /u07/retail/Bundle_de.properties rgbu_fc@<fc_host>:/u01/projects/MultiSolutionBundle_de.properties

基本上我确实有超过7个文件,我正在尝试单独的scps来实现它。所以我想把它分成一个单独的scp来传输所有的文件

我在这里尝试的scp命令很少 -

$  scp /u07/retail/Bundle_de.properties rgbu_fc@<fc_host>:/u01/projects/MultiSolutionBundle_de.properties

$ scp /u07/retail/Bundle_as.properties rgbu_fc@<fc_host>:/u01/projects/MultiSolutionBundle_as.properties

$ scp /u07/retail/Bundle_pt.properties rgbu_fc@<fc_host>:/u01/projects/MultiSolutionBundle_pt.properties

$ scp /u07/retail/Bundle_op.properties rgbu_fc@<fc_host>:/u01/projects/MultiSolutionBundle_op.properties  

我正在寻找一种解决方案,通过它我可以在一个scp命令中实现上述4个文件。

2 个答案:

答案 0 :(得分:2)

在任何标准POSIX shell中看起来都是一个简单的循环:

for i in de as pt op
do scp "/u07/retail/Bundle_$i.properties" "rgbu_fc@<fc_host>:/u01/projects/MultiSolutionBundle_$i.properties"
done

或者,您可以在本地为文件指定新名称(复制,链接或移动),然后使用通配符传输它们:

dir=$(mktemp -d)
for i in de as pt op
do cp "/u07/retail/Bundle_$i.properties" "$dir/MultiSolutionBundle_$i.properties"
done
scp "$dir"/* "rgbu_fc@<fc_host>:/u01/projects/"
rm -rf "$dir"

答案 1 :(得分:1)

使用GNU tar,ssh和bash:

pygame

如果要对文件名使用globbing(tar -C /u07/retail/ -c Bundle_{de,as,pt,op}.properties | ssh user@remote_host tar -C /u01/projects/ --transform 's/.*/MultiSolution\&/' --show-transformed-names -xv ):

*
  

cd /u07/retail/ && tar -c Bundle_*.properties | ssh user@remote_host tar -C /u01/projects/ --transform 's/.*/MultiSolution\&/' --show-transformed-names -xv :更改为目录

     

-C:创建新档案

     

-c:bash在执行tar命令

之前将其扩展为Bundle_{de,as,pt,op}.properties      

Bundle_de.properties Bundle_as.properties Bundle_pt.properties Bundle_op.properties:将--transform 's/.*/MultiSolution\&/'添加到文件名

     

MultiSolution:转换后显示文件名

     

--show-transformed-names:提取文件并详细列出已处理的文件