SCP递归文件传输顺序


11

想知道使用传输文件时是否可以指定排序顺序scp

例如: $ scp -r "user@host:/path/to/download/" .

[... files download in a seemingly random order ...]

由于这可能与scp功能有关,是否有某种方法可以在源(服务器)端配置ssh,以便例如以文件名的升序传输文件?

Answers:


4

我应该解决的问题tar以及的管道透明度ssh。可以在下面看到一个示例,该远程PC名为bar。在测试之前,我/tmp/foo通过执行创建了三个空文件ssh bar 'mkdir /tmp/foo ; touch /tmp/foo/{a,b,c}'

$ ssh bar 'cd /tmp/foo ; ls | sort -r | tar -cT -' | tar -xv
c
b
a
$ ls -l a b c
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 a
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 b
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 c

-T标志tar使它从下一个参数读取要打包的文件名,并-表示标准输入。现在,您只需要将文件名通过管道传送到文件中,该文件名可以来自ls(如示例中)或find用于棘手的任务。使用此设置,您可以sort用来指示将通过SSH传输文件的确切顺序(在这种情况下,是-r按反向字母顺序对文件排序)。将-v仅添加到最终的unpacking中tar,以便可见订单。


哇,很棒的低层方法,而且清晰地呈现了更广阔的前景。谢谢。
德米特里·明科夫斯基2012年

如何将这种方法扩展为单独传输文件而不是归档文件?循环遍历远程命令sort中的结果是否会以bar某种方式完成此任务?
德米特里·明科夫斯基2012年

可能可以,但是我认为将其转换为圆弧不存在问题。如果您考虑一下,这种方法之间并没有太大区别,并且scp-都为每个文件发送元数据和内容,它们只是使用了不同的“协议”。我想您可以遍历结果,但是随后您应该注意文件名中带有空格的文件。
dnet 2012年

2
@dimadima,如果您如此喜欢答案,也许您可​​以接受答案
Peter V.Mørch2015年

此答案有效,但必须将其调整为文件名称中带有空格的情况。
Ruslan

1

一个人可以使用rsync以下字母顺序实现文件传输:

rsync -P -e ssh -r user@remote_host:/some_path local_path

P允许部分下载,e设置SSH协议并r递归下载。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.