如何按照 scp -rp 复制文件的顺序列出文件?

如何按照 scp -rp 复制文件的顺序列出文件?

如何按照 scp -rp 复制文件的顺序列出文件?

我需要知道这一点,因为有时我需要 ctrl-C 一个 scp,然后想要复制剩余的文件。

答案1

虽然我会在这里使用rsync,但这是对问题的直接回答的尝试。

至少在 Debian GNU/Linux amd64 上使用 OpenSSH 7.4p1,并且在远程复制时(即源或目标位于远程主机上),它看起来像scp -r按照从目录读取文件的顺序处理文件。

这与您得到的顺序相同:

printf '%s\n' **/*(D.oN)

例如zsh。 globoN限定符用于禁用排序。也可以看看tree -U

$ tree -U 1
1
├── 2
│   ├── 4
│   │   └── 2-4
│   ├── 2
│   │   └── 2-2
│   ├── 3
│   │   └── 2-3
│   └── 1
│       └── 2-1
├── 3
│   ├── 4
│   │   └── 3-4
│   ├── 2
│   │   └── 3-2
│   ├── 3
│   │   └── 3-3
│   └── 1
│       └── 3-1
└── 1
    ├── 4
    │   └── 1-4
    ├── 2
    │   └── 1-2
    ├── 3
    │   └── 1-3
    └── 1
        └── 1-1
$ print -rl 1/**/*(D.oN)
1/2/4/2-4
1/2/2/2-2
1/2/3/2-3
1/2/1/2-1
1/3/4/3-4
1/3/2/3-2
1/3/3/3-3
1/3/1/3-1
1/1/4/1-4
1/1/2/1-2
1/1/3/1-3
1/1/1/1-1
$ scp -r localhost:1 2
2-4      100%    5    11.6KB/s   00:00
2-2      100%    5    38.9KB/s   00:00
2-3      100%    5    19.6KB/s   00:00
2-1      100%    5    19.6KB/s   00:00
3-4      100%    5    32.1KB/s   00:00
3-2      100%    5    38.8KB/s   00:00
3-3      100%    5    37.5KB/s   00:00
3-1      100%    5    28.4KB/s   00:00
1-4      100%    5    23.8KB/s   00:00
1-2      100%    5    39.1KB/s   00:00
1-3      100%    5    42.8KB/s   00:00
1-1      100%    5    40.9KB/s   00:00

答案2

嗯,显而易见的事情就是使用,-v这样你就可以在复制它们时看到它们的名字:

scp -vrp from/here to/there

然而,摆弄文件名并不是最好的方法。如果您发现自己需要经常这样做,那么您应该改用rsync。由于它有一个-u选项(仅当本地文件比远程文件新时才复制),因此它将跳过您已复制的任何文件,并且如果它在源和目标上找到相同的文件,则只会将差异复制到使远程文件与本地文件相同。

答案3

GNU ls 有--sort=none-U缩写形式)选项(“不排序;按目录顺序列出条目”)。

相关内容