Como faço para listar arquivos na mesma ordem que o scp -rp os copia?

3

Como faço para listar arquivos na mesma ordem que o scp -rp os copia?

Eu preciso saber isso porque às vezes eu preciso ctrl-C e scp e depois quero copiar os arquivos restantes.

    
por fadedbee 03.03.2017 / 10:39

2 respostas

2

Enquanto eu usaria rsync aqui, essa é uma tentativa como resposta direta à pergunta.

Com o OpenSSH 7.4p1 no Debian GNU / Linux amd64, pelo menos, e ao copiar remotamente (isto é, onde a origem ou o destino está em um host remoto), parece que scp -r processa os arquivos na ordem em que lê-los nos diretórios.

Esse é o mesmo pedido que você recebe:

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

em zsh , por exemplo. O qualificador oN glob é para desativar a classificação. Veja também 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
    
por 06.03.2017 / 17:25
3

Bem, a coisa óbvia a fazer é usar -v para que você possa ver os nomes deles enquanto estão sendo copiados:

scp -vrp from/here to/there

No entanto, mexer nos nomes dos arquivos não é a melhor abordagem. Se você precisar fazer isso com frequência, deverá usar rsync . Como tem uma opção -u (copiar somente se o arquivo local for mais recente que o remoto), ele ignorará todos os arquivos que você já copiou e, se encontrar o mesmo arquivo na origem e no destino, copiará somente as diferenças para tornar o arquivo remoto o mesmo que o local.

    
por 03.03.2017 / 10:52

Tags