Me gustaría copiar archivos desde / a un servidor remoto en diferentes directorios. 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?
rsync
, tal vez pueda ayudarte en este caso y en muchos casos futuros. Luego, para evitar ingresar contraseñas (y mucho menos varias veces), debe leer sobressh
las claves públicas / privadas, por ejemplo, digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2scp [email protected]:'/etc/openvpn/ca.crt /etc/openvpn/client/client0.crt /etc/openvpn/client/client0.key /etc/openvpn/client/ta.key' ./
.Respuestas:
Copie varios archivos de remoto a local:
Copie varios archivos de local a remoto:
Copie varios archivos de remoto a remoto:
Fuente: http://www.hypexr.org/linux_scp_help.php
fuente
~
o./
solo archivos .\{a,b,c\}
transferirá los archivos en una sola conexión / lote (ya que se expandirán en el host remoto), mientras que el uso{a,b,c}
abrirá varias conexiones, y la sobrecarga es bastante notable al transferir muchos archivosDe local a servidor:
scp file1.txt file2.sh [email protected]:~/pathtoupload
De servidor a local:
scp -T [email protected]:"file1.txt file2.txt" "~/yourpathtocopy"
fuente
-T
opción para suprimir ese error.Puede copiar directorios completos con el
-r
interruptor de modo que si puede aislar sus archivos en su propio directorio, puede copiar todo de una vez.así por ejemplo
O si hay solo algunos de ellos, puede usar:
fuente
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 único directorio que contiene todos los archivos que desea transferir (y nada más).Sin embargo, SFTP ofrece una alternativa si desea transferir archivos desde múltiples directorios diferentes, y los destinos no son idénticos:
Utiliza la sintaxis "here doc" para definir una secuencia de comandos de entrada SFTP. Como alternativa, puede poner los comandos SFTP en un archivo de texto y ejecutar
sftp user@host -b batchFile.txt
fuente
scp
manual durante demasiado tiempo tratando de encontrar esta función, y supongo que scp no la tiene./home/vagrant/Code/
lugar de~/Code/
.- r
para directoriosLas respuestas
{file1,file2,file3}
solo funcionan con bash (en forma remota o local)La forma real es:
fuente
{…, …, …}
obras en muchos proyectiles, no solo en Bash. Sin embargo, esto funciona en cualquier shell, por lo que es claramente mejor.Después de jugar con scp por un tiempo, encontré la solución más sólida:
(Cuidado con las comillas simples y dobles)
Local a remoto:
Remoto a local:
Tenga en cuenta que lo que sea después de "HOST:" se enviará al control remoto y se analizará allí. Por lo tanto, debemos asegurarnos de que el shell local no los procese. Es por eso que aparecen comillas simples. Las comillas dobles se usan para manejar espacios en los nombres de archivo.
Si todos los archivos están en el mismo directorio, podemos usar * para hacerlos coincidir, como
En comparación con el uso de la sintaxis "{}", que solo es compatible con algunos shells, esta es universal
fuente
{}
sintaxis facilita la copia de varios archivos desde el mismo directorio, ¿hay alguna forma de hacerloscp -r
para que"FILE1" "FILE2"
puedan ser rutas relativas y no rutas absolutas a los archivos?La forma más simple es
Entonces, la 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 estos cuatro archivos en un directorio local, no estoy seguro de si eso es lo que quería.
En el caso anterior, terminará 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
fuente
sh
.local$ scp -r remote:{A/1.txt,A/2.txt,B/3.txt,C/4.txt,D,F} ./
Problema : copiar múltiples directorios del servidor remoto a la máquina local usando un solo comando SCP y retener cada directorio tal 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
PD: Motivado por esta gran respuesta: scp o sftp copia múltiples archivos con un solo comando
Según los comentarios, esto también funciona bien en Git Bash en Windows
fuente
Copiar múltiples directorios:
fuente
Puedes hacerlo de esta manera:
Esto descargará todos los nombres de archivo enumerados en el directorio local en el que se encuentre.
Asegúrese de no poner espacios entre cada nombre de archivo, solo use una coma
,
.fuente
/path/to/files/\\{file1.ext,file2.ext,file3.ext\\}
si los archivos tuvieran extensiones diferentes. Nota para las personas de PowerShell (ahora que MS se ha unido a la fiesta) debe usar`
para escapar:/path/to/files/`{file1.ext,file2.ext,file3.ext`}
NOTA: Pido disculpas de antemano por responder solo una parte de la pregunta anterior. Sin embargo, encontré que estos comandos son útiles para mis necesidades actuales de Unix.
Carga de archivos específicos desde 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/
Descargar un directorio completo de una máquina remota a una máquina local:
~/Desktop$ scp -r [email protected]:Public/web/ Desktop/
fuente
En mi caso, estoy restringido a usar solo el comando sftp.
Entonces, tuve que usar un archivo por lotes con sftp. Creé 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 en el sistema remoto. 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.
fuente
su comando funciona perfecto, pero también quiero cambiar el nombre del archivo al enviar local a 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
fuente
hostname:/path/
realmente exista y sea accesible.scp usa ssh para la transferencia de datos con la misma autenticación y proporciona la misma seguridad que ssh.
Una práctica recomendada aquí es implementar "CLAVES SSH Y AUTENTICACIÓN DE CLAVES PÚBLICAS". Con esto, puede escribir sus scripts sin preocuparse por la autenticación. Simple como eso.
Vea QUÉ ES EL TECLADO SSH
fuente
En el caso específico en el que todos los archivos tienen la misma extensión pero con un sufijo diferente (por ejemplo, número de archivo de registro), utilice lo siguiente:
Esto copiará todos los archivos llamados some_log_file de la carpeta dada dentro del control remoto, es decir, some_log_file.1, some_log_file.2, some_log_file.3 ...
fuente
fuente
-r
opción descp
. Y puede conservar otros atributos (como la marca de tiempo) con la-p
opción.