Tengo 1,6 millones de archivos en el servidor A, y solo alrededor de 20k de ellos necesitan llegar al servidor B. El destino, el servidor B, está en el alojamiento compartido GoDaddy, por lo que estoy limitado a scp para transferir muchos archivos a la vez.
Me gustaría generar un archivo .txt de esos 20k + archivos a partir de una consulta SQL, luego alimentar esa lista en scp. ¿Hay alguna opción para hacerlo?
cat /proc/version
me da Linux version 2.6.32-531.23.3.lve1.2.65.el6.x86_64 ([email protected]) (gcc version 4.4.7 20120313 (Red Hat 4.4.7-4) (GCC) ) #1 SMP Tue Aug 19 10:37:27 EDT 2014
rsync
fue mi primer pensamiento también, pero GoDaddy tiene muchas bloqueos en la instalación de nuevo software a través de su SSH. Sí, las rutas de los archivos están actualmente en una base de datos SQL, pero puedo extraerlas fácilmente a un archivo de texto.rsync -L
para copiar los archivos al servidor remoto. El principal inconveniente es que debe limpiar el directorio después. No creo que esta sea una respuesta formal a esta pregunta, por eso agregué como comentario.Respuestas:
si ya tiene el archivo de texto creado, haga lo siguiente
esto irá línea por línea de la salida del archivo.txt y ejecutará el comap scp por línea; Espero que esto ayude.
fuente
xargs
en lascp
llamada fue usarloxargs
en uncp
servidor remoto para aislar los archivos en un directorio, algo así como:cat files.txt | xargs -l bash -c 'cp $0 $1'
luego usé un soloscp
comando para extraer ese directorio. ¡Gracias!La respuesta proporcionada funciona muy bien. Solía
xargs -a
enviar el archivo a estándar. Luego combiné eso con la respuesta original decat /location/file.txt | xargs -i scp {} user@server:/location
Mi respuesta:
fuente
xargs -a
usar en excesocat
?cat
es más portátil ya que la disponibilidad de-a
forxargs
depende del sistema.Las respuestas anteriores requieren que se autentique para cada archivo transferido. SCP se ejecuta sobre SSH y GoDaddy proporciona acceso a otros comandos a través de SSH, como tar. Como tal, el mejor método es usar tar con ssh a través de:
Si la lista de archivos está en STDIN, puede hacer lo siguiente en su lugar: Nota: cat se usa aquí para generar STDIN solamente
Para reducir el tiempo de transferencia a costa de un tiempo de procesamiento adicional, puede agregar -z o -j a ambos comandos tar para habilitar la compresión gzip o bzip respectivamente.
fuente
Quería hacer lo mismo para la lista de carpetas y ninguna de las respuestas que utilicé
xargs
funcionó para mí. Al final resolví esto simplemente con:Donde paso mi lista de archivos a la expansión de shell. Creo que esto puede ser útil para cualquiera que busque una solución alternativa.
fuente
Considere rsync como una alternativa, que tiene soporte ssh incorporado y admite la lectura de una lista de archivos usando
--files-from
.Ejemplo:
Ventajas sobre scp:
scp
difiere dersync
?Ver también:
fuente