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?

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.


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.


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!


1
Esto es solo un enlace. Para obtener una respuesta completa, proporcione la respuesta aquí y luego proporcione el enlace como referencia.
Kevin Panko
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.