protocolo portable sftp scp

portable - scp o sftp copia varios archivos con un solo comando



winscp (14)

Como mencionó Jiri, puede usar scp -r user@host:/some/remote/path /some/local/path para copiar archivos de forma recursiva. Esto supone que hay un solo directorio que contiene todos los archivos que desea transferir (y nada más).

Sin embargo, SFTP ofrece una alternativa si desea transferir archivos desde varios directorios diferentes, y los destinos no son idénticos:

sftp user@host << EOF get /some/remote/path1/file1 /some/local/path1/file1 get /some/remote/path2/file2 /some/local/path2/file2 get /some/remote/path3/file3 /some/local/path3/file3 EOF

Esto utiliza la sintaxis de "aquí documento" para definir una secuencia de comandos de entrada SFTP. Como alternativa, puede colocar los comandos SFTP en un archivo de texto y ejecutar sftp user@host -b batchFile.txt

Me gustaría copiar archivos de / a servidor remoto en directorios diferentes. Por ejemplo, quiero ejecutar estos 4 comandos a la vez.

scp remote:A/1.txt local:A/1.txt scp remote:A/2.txt local:A/2.txt scp remote:B/1.txt local:B/1.txt scp remote:C/1.txt local:C/1.txt

Cual es la forma mas fácil de hacer eso?





En el caso específico donde todos los archivos tienen la misma extensión pero con un sufijo diferente (por ejemplo, número de archivo de registro), utilice lo siguiente:

scp [email protected]: /some/log/folder/some_log_file.* ./

Esto copiará todos los archivos con el nombre some_log_file desde la carpeta dada dentro del control remoto, es decir, some_log_file.1, some_log_file.2, some_log_file.3 ....

Aclamaciones,

Chico


En mi caso, estoy restringido a solo usar el comando sftp.
Por lo tanto, tuve que usar un archivo batch con sftp. He creado un script como el siguiente. Esto supone que está trabajando en el directorio / tmp, y desea colocar los archivos en el sistema destdir_on_remote_system. Esto también solo funciona con un inicio de sesión no interactivo. Debe configurar claves públicas / privadas para poder iniciar sesión sin ingresar una contraseña. Cambiar según sea necesario.

#!/bin/bash cd /tmp # start script with list of files to transfer ls -1 fileset1* > batchfile1 ls -1 fileset2* >> batchfile1 sed -i -e ''s/^/put /'' batchfile1 echo "cd destdir_on_remote_system" > batchfile cat batchfile1 >> batchfile rm batchfile1 sftp -b batchfile user@host


La forma más sencilla es

local$ scp remote:{A/1,A/2,B/3,C/4}.txt ./

Así que {..} lista puede incluir directorios (A, B y C aquí son directorios; "1.txt" y "2.txt" son nombres de archivo en esos directorios).

Aunque copiaría todos estos cuatro archivos en un directorio local, no estoy seguro de si eso es lo que quería.

En el caso anterior, terminará con los archivos remotos A / 1.txt, A / 2.txt, B / 3.txt y C / 4.txt copiados en un solo directorio local, con nombres de archivo ./1.txt, ./2.txt, ./3.txt y ./4.txt


Las respuestas con {file1,file2,file3} solo funcionan con bash (en forma remota o local)

La verdadera manera es:

scp user@remote:''/path1/file1 /path2/file2 /path3/file3'' /localPath


NOTA: Me disculpo por adelantado por responder solo una parte de la pregunta anterior. Sin embargo, encontré que estos comandos son útiles para mis necesidades actuales de Unix.

Cargar archivos específicos de una máquina local a una máquina remota:

~/Desktop/dump_files$ scp file1.txt file2.txt lab1.cpp etc.ext [email protected]:Folder1/DestinationFolderForFiles/

Cargar un directorio completo desde una máquina local a una máquina remota:

~$ scp -r Desktop/dump_files [email protected]:Folder1/DestinationFolderForFiles/

Descargando un directorio completo desde una máquina remota a una máquina local:

~/Desktop$ scp -r [email protected]:Public/web/ Desktop/


Puede copiar directorios enteros utilizando el -r modo que si puede aislar sus archivos en su propio directorio, puede copiar todo a la vez.

scp -r ./dir-with-files user@remote-server:upload-path scp -r user@remote-server:path-to-dir-with-files download-path

así por ejemplo

scp -r [email protected]:/var/log ~/backup-logs

O si solo hay algunos de ellos, puedes usar:

scp 1.txt 2.txt 3.log user@remote-server:upload-path


scp usa ssh para la transferencia de datos con la misma autenticación y proporciona la misma seguridad que ssh.

Una buena práctica aquí es implementar "CLAVES SSH Y AUTENTIFICACIÓN DE CLAVE PÚBLICA". Con esto, puede escribir sus scripts sin preocuparse por la autenticación. Simple como eso.

Vea QUÉ ES SSH-KEYGEN


su comando funciona a la perfección, pero también quiero cambiar el nombre del archivo mientras envío el local al remoto. Escribí un comando: - sshpass -p contraseña scp /path/to/file.txt root @ hostname: /path/newfile.txt

Pero da error que /path/newfile.txt: No se encontró tal archivo o directorio, por favor, ayúdenme en esta situación.


Problema : Copiar varios directorios del servidor remoto a la máquina local usando un solo comando SCP y retener cada directorio como está en el servidor remoto.

Solución : SCP puede hacer esto fácilmente. Esto resuelve el molesto problema de ingresar la contraseña varias veces cuando se usa SCP con varias carpetas. En consecuencia, esto también ahorra mucho tiempo!

p.ej

# copies folders t1, t2, t3 from `test` to your local working directory # note that there shouldn''t be any space in between the folder names; # we also escape the braces. # please note the dot at the end of the SCP command ~$ cd ~/working/directory ~$ scp -r [email protected]:/work/datasets/images/test//{t1,t2,t3/} .

PD: motivado por esta gran respuesta: scp o sftp copian varios archivos con un solo comando

Basado en los comentarios, esto también funciona bien en Git Bash en Windows


scp remote:"[A-C]/[12].txt" local: