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?
Copiar múltiples directorios:
scp -r dir1 dir2 dir3 [email protected]:~/
Copie múltiples archivos de remoto a local:
$ scp [email protected]:/some/remote/directory//{a,b,c/} ./
Copie múltiples archivos de local a remoto:
$ scp foo.txt bar.txt [email protected]:~
$ scp {foo,bar}.txt [email protected]:~
$ scp *.txt [email protected]:~
Copie múltiples archivos de remoto a remoto:
$ scp [email protected]:/some/remote/directory/foobar.txt /
[email protected]:/some/remote/directory/
De local a servidor:
scp file1.txt file2.sh [email protected]:~/pathtoupload
Del servidor al local:
scp [email protected]:"file1.log file2.log" "~/yourpathtocopy"
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.
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: