scp:如何从保存整个路径的不同目录传输文件

时间:2015-09-18 15:01:22

标签: scp

我需要从远程服务器传输来自不同目录的所有* .png但保留每个.png文件的完整路径,因为所有.png文件都具有相同的名称。

scp -r -e server:coverages/K4me3/*/pos/output/*/*.png Desktop/

虽然应对它会重写已经存在的.png文件,因为它们的名称在不同的目录中是相同的。我想保留完整的目录路径,复制时,.png文件将复制到自己的目录中。

2 个答案:

答案 0 :(得分:0)

正如您所发现的,SCP并不保留文件的路径。

您可能希望使用rsync来执行此操作,因为rsync会保留路径

我认为命令是:

rsync -a -r -v -z server_config:/path/to/root/directory/on/server [destination_folder]

这与此问题相反:scp a folder to a remote system keeping the directory layout

或者,正如评论所示,您可以编写一个脚本来获取所有文件或较低级别的目录(使用绝对路径)并在每个目录上调用scp传输。这是一个用于以这种方式复制文件的脚本:

#!/usr/bin/env python
from multiprocessing.dummy import Pool
from subprocess import call
from functools import partial

root = #  Root Directory
files = [
    root + # Sub 1,
    root + # Sub 2,
    root + # Sub 3,
    root + # Sub etc,
]
command_s = "scp -r -v -c arcfour -F /path/to/.ssh/config Server:"
command_e = " Output_Dir/"
max_processes = 4  
# Transfer the files 4 at a time because my computer is busy with other stuff
cmds = []

for filename in files:
    cmds.append(command_s + filename + command_e)

pool = Pool(max_processes)
for i, returncode in enumerate(pool.imap(partial(call, shell=True), cmds)):
    if returncode != 0:
        print ("%d command failed: %d" % (i, returncode))

答案 1 :(得分:0)

以下是保留目录结构并将仅png文件从服务器复制到基于ssh的本地系统的答案。

ssh user@server 'find /server/path -name "*.png" -print0 | xargs -0 tar -cO' | tar -xfv - -C .

来源:Link