La consola o terminal en Linux es una herramienta muy poderosa, si se conoce como funciona y se sabe utilizar. Un gran problema para todos los principiantes es conocer los comandos básicos, un comando muy básico que todos debemos saber, es el comando que nos permite copiar archivos desde la terminal, y es tan sencillo que no es necesario apuntarlo.
Copiar archivos
El comando que usaremos es cp. El formato que estaremos usando es, el nombre del comando, seguido de un espacio y la ruta absoluta o relativa del archivo origen a copiar, y otro espacio seguido de la ruta completa del directorio en donde se copiará el nuevo archivo, incluyendo el nombre que tendrá este, que puede ser diferente al archivo origen.
Ahora en la terminal:
cp /tmp/carpeta-origen/archivo-antiguo.bin /root/carpeta-destino/nuevo-archivo.bin
Con este pequeño fragmento de código, se copia un archivo hacia otra localización, el único inconveniente es que tenemos que ajustar los permisos después de copiarlo, a menos de que lo queramos para el mismo usuario root.
Copiar archivos y carpetas de forma recursiva
Para copiar todo el contenido de la carpeta origen a la carpeta destino usamos el parámetro -R
.
cp -R /tmp/carpeta-origen /root/carpeta-destino
Uso de comodines para copiar, y copiar de forma recursiva
En ocasiones necesitamos copiar archivos basados en su extensión o nombre de archivo, por lo tanto, el uso de comodines es lo mejor.
Si necesitamos copiar archivos en el primer nivel o de forma recursiva de la carpeta actual con la extensión .js
.
Sencillo, solo el primer nivel:
cp *.js /home/usuario/carpeta-destino/
Recursivo, se copiarán todos los archivos con la extensión anterior en el nivel superior y en todas las carpetas internas:
cp -R *.js /home/usuario/carpeta-destino/
Lista de comodines útiles:
*
hace referencia a todo el contenido dentro del directorio incluyendo otros directorios, no selecciona archivos y carpetas ocultos..
hace referencia a la carpeta actual..*
hace referencia a todos los archivos y carpetas, incluidos los ocultos.*.*
hace referencia a todos los archivos que usen el formatonombre.extensión
.
Copiar contenido de carpeta actual hacia otra carpeta de forma recursiva
Si nos encontramos dentro de una carpeta y queremos copiar todos los archivos de forma recursiva hacia otra carpeta, usamos el comodín .
y el parámetro -R
.
cp -R . /root/carpeta/
Para que el comando anterior funcione nos debemos colocar en el directorio que tiene el contenido que deseamos copiar con cd
.
Por ejemplo, cd /root/micarpeta-con-contenido/
, y desde ahí ejecutar el comando que copiara todo el contenido de la carpeta, pero sin copiar la carpeta padre.
Copiar con rutas relativas
Normalmente, cuando copiamos archivos y carpetas lo hacemos con rutas absolutas, en otras palabras, rutas completas, pero también podemos usar rutas relativas al directorio en el que nos encontremos. Existen casos especiales en los que esto se necesita, por ejemplo, si descargamos un archivo zip y lo descomprimimos en un directorio, pero su contenido se guardó en un directorio llamado directorio-123-descargado, que es el mismo nombre del archivo zip, directorio-123-descargado.zip, entonces necesitamos que todo el contenido del directorio se copie un directorio hacia atrás.
Las rutas relativas en Linux se manejan con dos puntos seguidos ..
para indicar un nivel hacia arriba, y no deben empezar con diagonal. Puede darse el caso de utilizar los dos puntos con rutas absolutas, pero ese es otro tema. Un solo punto después de la diagonal indica que se usara el contenido de esa carpeta y no la carpeta en sí. Por otra parte, podemos reemplazar los dos puntos con el comodín *
para subir de niveles.
Ejemplo para copiar de forma recursiva un nivel hacia atrás y solo el contenido del directorio:
cp lo-que-descomprimi/. ../
Se ve un poco extraño, pero es bastante sencillo y práctico, incluso se pueden combinar los dos puntos con varios niveles, por ejemplo:
cp lo-que-descomprimi/. ../../../../
Solo que no lo recomiendo porque es un fastidio tener que estar contando los niveles y calcular las posiciones. Pero para situaciones sencillas en las que solo se manejan uno o dos niveles de diferencia no debe haber problema.
Ejemplo para copiar de forma recursiva un nivel hacia atrás y dos niveles hacia adelante con comodines y solo el contenido del directorio:
cp lo-que-descomprimi/. ../nueva-ruta-incompl*/dire*o/
Como podemos observar, podemos completar las rutas con comodines, en una de las situaciones que más nos ayuda es cuando tenemos una carpeta con el nombre de un proyecto seguido de su versión y desconocemos la versión, por ejemplo, php-7.*
.