Orden de transferencia recursiva de archivos SCP

11

Preguntándose si es posible especificar un orden de clasificación al transferir archivos con scp.

Por ejemplo: $ scp -r "user@host:/path/to/download/" .

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

Dado que quizás esto puede estar relacionado con el scpfuncionamiento, ¿hay alguna forma de configurar ssh en el lado de origen (servidor) para que los archivos se transfieran, por ejemplo, en orden ascendente de nombre de archivo?

Dmitry Minkovsky
fuente

Respuestas:

4

Resolvería el problema tary la transparencia de la tubería ssh. Un ejemplo se puede ver a continuación, se nombra la PC remota bar. Antes de la prueba, creé tres archivos vacíos /tmp/fooejecutándolos 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

El -Tindicador de tarhace que lea los nombres de archivo para empacar desde el siguiente parámetro, y -significa la entrada estándar. Ahora solo necesita canalizar el nombre de los archivos, que pueden provenir ls(como en el ejemplo) o findpara tareas más complicadas. Con esta configuración, puede usar sortpara indicar el orden exacto en que los archivos se transmitirán a través de SSH (en este caso, los -rarchivos ordenados en orden alfabético inverso). El -vsolamente se añade a la final, el desembalaje tar, de manera que el orden es visible.

dnet
fuente
Woah, gran enfoque de nivel inferior y presentando la imagen más amplia con tanta claridad. Gracias.
Dmitry Minkovsky
¿Cómo podría extenderse este enfoque para transferir archivos individualmente en lugar de en un archivo? Sería un bucle de iteración sobre los resultados de sortla barorden remota alguna manera de lograr esto?
Dmitry Minkovsky
Puede ser, pero no veo el problema de transferirlo como una solución. Si lo piensa, no hay mucha diferencia entre este enfoque y scp, ambos envían metadatos y contenidos para cada archivo, solo usan un "protocolo" diferente. Supongo que podría iterar sobre los resultados, pero luego debería ocuparse de los archivos con espacios en blanco en sus nombres.
dnet
2
@dimadima, si te gusta tanto la respuesta, tal vez puedas aceptarla .
Peter V. Mørch
Esta respuesta funciona, pero hay que ajustarla al caso cuando los archivos tienen espacios en los nombres.
Ruslan
1

Uno puede lograr la transferencia de archivos con orden alfabético usando rsync:

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

Ppermite descargas parciales, eestablece el protocolo SSH y rdescargas recursivas.

Lenar Hoyt
fuente
0

En caso de que esto ayude a alguien, proporcioné una solución simple aquí:

/programming/23067175

¡Todavía estoy esperando una forma más inteligente de hacerlo!

Victor Sojo
fuente
1
Esto es solo un enlace. Para obtener una respuesta completa, proporcione la respuesta aquí y luego proporcione el enlace como referencia.
Kevin Panko