Transferencia de archivos con ordenadores remotos
Última actualización: 2025-08-04 | Mejora esta página
Hoja de ruta
Preguntas
- ¿Cómo transfiero archivos a (y desde) el cluster?
Objetivos
- Transfiere archivos hacia y desde un clúster informático.
Realizar trabajo en un ordenador remoto no es muy útil si no podemos obtener ficheros hacia o desde el cluster. Existen varias opciones para transferir datos entre recursos informáticos utilizando utilidades CLI y GUI, algunas de las cuales veremos a continuación.
Descargar archivos de lecciones de Internet
Una de las formas más sencillas de descargar archivos es utilizar
curl
o wget
. Uno de ellos suele estar
instalado en la mayoría de los shells de Linux, en el terminal de Mac OS
y en GitBash. Cualquier archivo que pueda descargarse en su navegador
web a través de un enlace directo puede descargarse utilizando
curl
o wget
. Esta es una forma rápida de
descargar conjuntos de datos o código fuente. La sintaxis de estos
comandos es
wget [-O new_name] https://some/link/to/a/file
curl [-o new_name] https://some/link/to/a/file
Pruébalo descargando algún material que usaremos más adelante, desde un terminal en tu máquina local, usando la URL de la base de código actual:
https://github.com/hpc-carpentry/amdahl/tarball/main
Descarga el “Tarball”
La palabra “tarball” en la URL anterior se refiere a un formato de
archivo comprimido comúnmente utilizado en Linux, que es el sistema
operativo que ejecutan la mayoría de las máquinas de clúster HPC. Un
tarball es muy parecido a un archivo .zip
. La extensión
real del archivo es .tar.gz
, que refleja el proceso en dos
etapas utilizado para crearlo: los archivos o carpetas se fusionan en un
único archivo utilizando tar
, que luego se comprime
utilizando gzip
, por lo que la extensión del archivo es
“tar-dot-g-z” Es un trabalenguas, así que la gente suele decir “el
tarball xyz” en su lugar.
También puede ver la extensión .tgz
, que no es más que
una abreviatura de .tar.gz
.
Por defecto, curl
y wget
descargan los
archivos con el mismo nombre que la URL: en este caso,
main
. Utilice uno de los comandos anteriores para guardar
el tarball como amdahl.tar.gz
.
Después de descargar el archivo, utilice ls
para verlo
en su directorio de trabajo:
Archivar ficheros
Uno de los mayores retos a los que nos enfrentamos a menudo cuando transferimos datos entre sistemas HPC remotos es el de un gran número de archivos. Hay una sobrecarga en la transferencia de cada archivo individual y cuando estamos transfiriendo un gran número de archivos estas sobrecargas se combinan para ralentizar nuestras transferencias en gran medida.
La solución a este problema es archivar múltiples ficheros
en números más pequeños de ficheros más grandes antes de transferir los
datos para mejorar nuestra eficiencia de transferencia. A veces
combinaremos el archivado con la compresión para reducir la
cantidad de datos que tenemos que transferir y así acelerar la
transferencia. El comando de archivado más común en un cluster HPC
(Linux) es tar
.
tar
puede utilizarse para combinar ficheros y carpetas
en un único fichero de archivo y, opcionalmente, comprimir el resultado.
Veamos el archivo que descargamos del sitio de la lección,
amdahl.tar.gz
.
La parte .gz
significa gzip, que es una
biblioteca de compresión. Es común (¡pero no necesario!) que este tipo
de archivo pueda interpretarse leyendo su nombre: parece que alguien
tomó archivos y carpetas relacionados con algo llamado “amdahl”, los
envolvió todos en un único archivo con tar
, y luego
comprimió ese archivo con gzip
para ahorrar espacio.
Veamos si es el caso, sin descomprimir el archivo.
tar
imprime el “table de contenidos” con
la bandera -t
, para el fichero especificado con la bandera
-f
seguido del nombre del fichero. Tenga en cuenta que
puede concatenar las dos banderas: escribir -t -f
es
intercambiable con escribir -tf
juntas. Sin embargo, el
argumento que sigue a -f
debe ser un nombre de fichero, por
lo que escribir -ft
no funcionará.
BASH
[you@laptop:~]$ tar -tf amdahl.tar.gz
hpc-carpentry-amdahl-46c9b4b/
hpc-carpentry-amdahl-46c9b4b/.github/
hpc-carpentry-amdahl-46c9b4b/.github/workflows/
hpc-carpentry-amdahl-46c9b4b/.github/workflows/python-publish.yml
hpc-carpentry-amdahl-46c9b4b/.gitignore
hpc-carpentry-amdahl-46c9b4b/LICENSE
hpc-carpentry-amdahl-46c9b4b/README.md
hpc-carpentry-amdahl-46c9b4b/amdahl/
hpc-carpentry-amdahl-46c9b4b/amdahl/__init__.py
hpc-carpentry-amdahl-46c9b4b/amdahl/__main__.py
hpc-carpentry-amdahl-46c9b4b/amdahl/amdahl.py
hpc-carpentry-amdahl-46c9b4b/requirements.txt
hpc-carpentry-amdahl-46c9b4b/setup.py
Este ejemplo muestra una carpeta que contiene algunos archivos, donde
46c9b4b
es un hash de confirmación git de 8 caracteres
que cambiará cuando se actualice el material fuente.
Ahora vamos a descomprimir el archivo. Ejecutaremos tar
con algunas banderas comunes:
-
-x
para extraer el archivo -
-v
para una salida verbosa -
-z
para compresión gzip -
-f «tarball»
para el fichero a descomprimir
Extraer el archivo
Usando las banderas de arriba, desempaquete el tarball del código
fuente en un nuevo directorio llamado “amdahl” usando
tar
.
SALIDA
hpc-carpentry-amdahl-46c9b4b/
hpc-carpentry-amdahl-46c9b4b/.github/
hpc-carpentry-amdahl-46c9b4b/.github/workflows/
hpc-carpentry-amdahl-46c9b4b/.github/workflows/python-publish.yml
hpc-carpentry-amdahl-46c9b4b/.gitignore
hpc-carpentry-amdahl-46c9b4b/LICENSE
hpc-carpentry-amdahl-46c9b4b/README.md
hpc-carpentry-amdahl-46c9b4b/amdahl/
hpc-carpentry-amdahl-46c9b4b/amdahl/__init__.py
hpc-carpentry-amdahl-46c9b4b/amdahl/__main__.py
hpc-carpentry-amdahl-46c9b4b/amdahl/amdahl.py
hpc-carpentry-amdahl-46c9b4b/requirements.txt
hpc-carpentry-amdahl-46c9b4b/setup.py
Observe que no necesitamos teclear -x -v -z -f
, gracias
a la concatenación de banderas, aunque el comando funciona de forma
idéntica de cualquier forma – siempre que la lista concatenada termine
con f
, porque la siguiente cadena debe especificar el
nombre del fichero a extraer.
La carpeta tiene un nombre desafortunado, así que cambiémoslo por algo más conveniente.
Comprueba el tamaño del directorio extraído y compáralo con el tamaño
del archivo comprimido, utilizando du
para
“disk usage”.
BASH
[you@laptop:~]$ du -sh amdahl.tar.gz
8.0K amdahl.tar.gz
[you@laptop:~]$ du -sh amdahl
48K amdahl
Los archivos de texto (incluido el código fuente de Python) se comprimen muy bien: ¡el “tarball” es una sexta parte del tamaño total de los datos en bruto!
Si desea invertir el proceso – comprimir los datos en bruto en lugar
de extraerlos – establezca una bandera c
en lugar de
x
, establezca el nombre del fichero de archivo, y luego
proporcione un directorio para comprimir:
SALIDA
amdahl/
amdahl/.github/
amdahl/.github/workflows/
amdahl/.github/workflows/python-publish.yml
amdahl/.gitignore
amdahl/LICENSE
amdahl/README.md
amdahl/amdahl/
amdahl/amdahl/__init__.py
amdahl/amdahl/__main__.py
amdahl/amdahl/amdahl.py
amdahl/requirements.txt
amdahl/setup.py
Si das amdahl.tar.gz
como nombre de fichero en el
comando anterior, tar
actualizará el tarball existente con
cualquier cambio que hayas hecho en los ficheros. Eso significaría
añadir la nueva carpeta amdahl
a la carpeta
existente (hpc-carpentry-amdahl-46c9b4b
) dentro
del tarball, ¡duplicando el tamaño del archivo!
Trabajando con Windows
Cuando transfieres ficheros de texto de un sistema Windows a un sistema Unix (Mac, Linux, BSD, Solaris, etc.) esto puede causar problemas. Windows codifica sus ficheros de forma ligeramente diferente a Unix, y añade un carácter extra a cada línea.
En un sistema Unix, cada línea de un archivo termina con una
\n
(nueva línea). En Windows, cada línea de un archivo
termina con \r\n
(retorno de carro + nueva línea). Esto a
veces causa problemas.
Aunque la mayoría de los lenguajes de programación y software
modernos manejan esto correctamente, en algunos casos raros, puede
encontrarse con un problema. La solución es convertir un archivo de
Windows a la codificación Unix con el comando dos2unix
.
Puede identificar si un fichero tiene terminaciones de línea Windows
con cat -A filename
. Un fichero con terminaciones de línea
Windows tendrá ^M$
al final de cada línea. Un fichero con
terminaciones de línea Unix tendrá $
al final de cada
línea.
Para convertir el archivo, basta con ejecutar
dos2unix filename
. (A la inversa, para volver a convertirlo
al formato de Windows, puede ejecutar
unix2dos filename
)
Transferencia de archivos y carpetas con scp
Para copiar un único fichero hacia o desde el cluster, podemos
utilizar scp
(“copia segura”). La sintaxis puede resultar
un poco compleja para los nuevos usuarios, pero vamos a desglosarla. El
comando scp
es un pariente del comando ssh
que
utilizamos para acceder al sistema, y puede utilizar el mismo mecanismo
de autenticación de clave pública.
Para cargar a otro ordenador, el comando de plantilla es
en el que @
y :
son separadores de campo y
remote_destination
es una ruta relativa a su directorio
personal remoto, o un nuevo nombre de fichero si desea cambiarlo, o
ambos una ruta relativa y un nuevo nombre de fichero. Si no
tiene una carpeta específica en mente, puede omitir
remote_destination
y el archivo se copiará a su directorio
personal en el ordenador remoto (con su nombre original). Si incluye
remote_destination
, tenga en cuenta que scp
lo
interpreta de la misma forma que cp
cuando hace copias
locales: si existe y es una carpeta, el fichero se copia dentro de la
carpeta; si existe y es un fichero, el fichero se sobrescribe con el
contenido de local_file
; si no existe, se asume que es un
nombre de fichero de destino para local_file
.
Sube el material de la lección a tu directorio personal remoto de esta forma:
¿Por qué no descargar en HPC Carpentry’s Cloud Cluster directamente?
La mayoría de los clusters de ordenadores están protegidos de la Internet abierta por un firewall. Para mejorar la seguridad, algunos están configurados para permitir el tráfico entrante, pero no saliente. Esto significa que un usuario autentificado puede enviar un fichero a una máquina del cluster, pero una máquina del cluster no puede recuperar ficheros de la máquina de un usuario o de la Internet abierta.
Intente descargar el archivo directamente. Tenga en cuenta que puede fallar, ¡y no pasa nada!
¿Por qué no descargar en HPC Carpentry’s Cloud Cluster directamente? (continued)
¿Funcionó? Si no, ¿qué te dice la salida del terminal sobre lo que ha pasado?
Transferir un directorio
Para transferir un directorio entero, añadimos la bandera
-r
para “recursivo”: copia el elemento
especificado, y cada elemento por debajo de él, y cada elemento por
debajo de esos… hasta que llegue al fondo del árbol de directorios
enraizado en el nombre de carpeta que proporcionaste.
Precaución
Para un directorio grande – ya sea en tamaño o en número de ficheros
– copiar con -r
puede tardar mucho tiempo en
completarse.
Cuando utilice scp
, habrá notado que :
siempre sigue al nombre del ordenador remoto. Una cadena
después de :
especifica el directorio remoto al
que desea transferir el archivo o carpeta, incluyendo un nuevo nombre si
desea renombrar el material remoto. Si deja este campo en blanco,
scp
por defecto será su directorio personal y el nombre del
material local a transferir.
En los ordenadores Linux, /
es el separador en las rutas
de archivos o directorios. Una ruta que comienza con /
se
llama absoluta, ya que no puede haber nada por encima de la
raíz /
. Una ruta que no empieza por /
se llama
relativa, ya que no está anclada a la raíz.
Si quiere subir un fichero a una ubicación dentro de su directorio
personal – lo que suele ser el caso – entonces no necesita un
/
líder. Después de :
, puede escribir
la ruta de destino relativa a su directorio personal. Si su directorio
personal es el destino, puede dejar el campo de destino en
blanco, o escribir ~
– la abreviatura de su directorio
personal – para completar.
Con scp
, una barra al final del directorio de destino es
opcional y no tiene ningún efecto. Una barra al final del directorio de
origen es importante para otros comandos, como rsync
.
Nota sobre rsync
A medida que adquiera experiencia en la transferencia de archivos,
puede que el comando scp
le resulte limitante. La utilidad
rsync proporciona características
avanzadas para la transferencia de archivos y es normalmente más rápida
comparada con scp
y sftp
(ver más abajo). Es
especialmente útil para transferir archivos grandes y/o numerosos y para
sincronizar el contenido de carpetas entre ordenadores.
La sintaxis es similar a scp
. Para transferir a
otro ordenador con opciones de uso común:
Las opciones son:
-
-a
(archivo) para preservar las marcas de tiempo de los archivos, los permisos y las carpetas, entre otras cosas; implica recursión -
-v
(verbose) para obtener una salida detallada que le ayude a monitorizar la transferencia -
-P
(partial/progress) para preservar los archivos parcialmente transferidos en caso de interrupción y también muestra el progreso de la transferencia.
Para copiar recursivamente un directorio, podemos utilizar las mismas opciones:
Tal y como está escrito, esto colocará el directorio local y su contenido bajo tu directorio personal en el sistema remoto. Si se añade una barra al final del origen, no se creará un nuevo directorio correspondiente al directorio transferido, y el contenido del directorio de origen se copiará directamente en el directorio de destino.
Para descargar un archivo, simplemente cambiamos el origen y el destino:
Las transferencias de ficheros utilizando tanto scp
como
rsync
utilizan SSH para encriptar los datos enviados a
través de la red. Por lo tanto, si puede conectarse a través de SSH,
podrá transferir archivos. Por defecto, SSH utiliza el puerto de red 22.
Si se está utilizando un puerto SSH personalizado, tendrá que
especificarlo utilizando la bandera apropiada, a menudo -p
,
-P
, o --port
. Comprueba --help
o
la página man
si no estás seguro.
BASH
[you@laptop:~]$ man rsync
[you@laptop:~]$ rsync --help | grep port
--port=PORT specify double-colon alternate port number
See http://rsync.samba.org/ for updates, bug reports, and answers
[you@laptop:~]$ rsync --port=768 amdahl.tar.gz yourUsername@cluster.hpc-carpentry.org:
(Tenga en cuenta que este comando fallará, ya que el puerto correcto en este caso es el predeterminado: 22.)
Transferencia interactiva de archivos con FileZilla
FileZilla es un cliente multiplataforma para descargar y subir
archivos a y desde un ordenador remoto. Es absolutamente infalible y
siempre funciona bastante bien. Utiliza el protocolo sftp
.
Puede leer más sobre el uso del protocolo sftp
en la línea
de comandos en la discusión de la
lección.
Descargue e instale el cliente FileZilla desde https://filezilla-project.org. Tras instalar y abrir el programa, debería aparecer una ventana con un explorador de archivos de su sistema local en la parte izquierda de la pantalla. Cuando te conectes al cluster, los archivos de tu cluster aparecerán en la parte derecha.
Para conectarnos al cluster, sólo tendremos que introducir nuestras credenciales en la parte superior de la pantalla:
- Host:
sftp://cluster.hpc-carpentry.org
- Usuario: Su nombre de usuario del cluster
- Contraseña: Su contraseña del clúster
- Puerto: (déjelo en blanco para usar el puerto por defecto)
Pulsa “Quickconnect” para conectarte. Deberías ver tus archivos remotos aparecer en la parte derecha de la pantalla. Puedes arrastrar y soltar archivos entre los lados izquierdo (local) y derecho (remoto) de la pantalla para transferir archivos.
Por último, si necesita mover archivos grandes (normalmente de más de
un gigabyte) de un ordenador remoto a otro remoto, acceda mediante SSH
al ordenador que aloja los archivos y utilice scp
o
rsync
para transferirlos al otro. Esto será más eficiente
que usar FileZilla (o aplicaciones relacionadas) que copiarían de la
fuente a su máquina local, y luego a la máquina de destino.
Puntos Clave
-
wget
ycurl -O
descarga un archivo de Internet. -
scp
yrsync
transfieren archivos desde y hacia su ordenador. - Puede utilizar un cliente SFTP como FileZilla para transferir archivos a través de una GUI.