Manipular ficheros y carpetas

Crear, copiar, mover y borrar archivos


Para trabajar desde una terminal, es muy necesario saber moverse entre carpetas y manipular ficheros y carpetas. Acciones como copiar, mover y borrar ficheros o crear carpetas forman parte del día a día en nuestras terminales de texto.

Por esa razón es necesario conocer algunos de los comandos más habituales para estas y otras tareas relacionadas, así como sus parámetros o curiosidades más importantes.

Copiar ficheros

Una operación básica a la hora de usar una terminal es la de copiar ficheros. Nos encontramos continuamente haciendo copias de ficheros o carpetas, ya sea de una ruta a otra o sobre la misma carpeta donde nos encontramos.

Para ello, utilizamos el comando cp (copy), que suele utilizarse de la siguiente forma:

$ pwd
/home/manz

$ cp origen.txt /home/tux/destino.txt

En este sencillo ejemplo hemos copiado el fichero origen.txt desde la carpeta /home/manz a la carpeta /home/tux cambiándole el nombre a destino.txt.

Asumamos que seguimos en la carpeta /home/manz:

Rutas relativas y rutas absolutas

La forma en la que especificamos las rutas y copiamos ficheros, pueden simplificarse y hacerse más flexibles dependiendo de si utilizamos rutas absolutas o rutas relativas:

TipoDescripciónEjemplo
Ruta absolutaRuta completa de la carpeta o fichero (desde el raíz)./home/tux
Ruta actualRuta donde nos encontramos actualmente..
Ruta padreRuta a la carpeta anterior de donde nos encontramos actualmente...
Ruta relativaRuta completa, pero sólo a partir de la carpeta donde nos encontramos.../tux

Veámoslo con varios ejemplos:

# Caso 1: Rutas absolutas
$ cp /home/manz/origen.txt /home/tux/destino.txt

# Caso 2: Rutas relativas
$ cp origen.txt destino.txt

# Caso 3: Rutas relativas
$ cp origen.txt ../tux/destino.txt

# Caso 4: Ruta absoluta y ruta relativa
$ cp /etc/resolv.conf ./backup.conf

Vamos a explicar cada caso:

  • El primer caso, equivalente al primer ejemplo, pero indicando rutas absolutas.
  • El segundo caso, creamos una copia con nombre destino.txt en la misma ruta.
  • El tercer caso, asumiendo que seguimos en la ruta /home/manz, copiamos el fichero origen.txt a la ruta relativa ../tux, es decir, a /home/tux, con nombre destino.txt.
  • El cuarto caso, copiamos el fichero resolv.conf de la ruta /etc a ., o sea, la carpeta actual donde nos encontramos, pero con el nombre backup.conf.

Por otro lado, es importante recalcar que el comando cp tiene algunos parámetros que pueden resultarnos útiles, como por ejemplo el parámetro -r que nos permite hacer copias recursivas, esto es, no sólo copiar ficheros, sino carpetas y su contenido, ya que por defecto cp solo copia ficheros.

Los parámetros más populares son los siguientes:

ParámetroSignificado
-r (recursive)El comando cp sólo copia ficheros. Usar -r si se quiere copiar carpetas y su contenido.
-u (update)Copia sólo cuando no hay fichero de destino. Si existe, sólo cuando el origen es más nuevo.
-n (no clobber)No sobreescribe en el destino un fichero que ya existe.
-v (verbose)Por defecto, cp trabaja en silencio. Con este parámetro muestra lo que está haciendo.

Existe una versión alternativa llamada xcp, desarrollada en Rust, que es una alternativa al comando cp, no como un reemplazo completo, pero si con algunas ventajas.

Para instalarlo, debemos tener instalado Rust en nuestro sistema y escribir cargo install xcp. Con ello instalaremos el comando y podremos utilizarlo.

La sintaxis es muy parecida a cp y tiene algunas mejoras como mostrar una barra de progreso gráfica, copia más rápida de archivos o un mejor aprovechamiento de los núcleos de la CPU del sistema.

Mover o renombrar ficheros

Debemos saber que, en esencia, el proceso de mover un archivo de una carpeta a otra, si podemos cambiarle el nombre del archivo en el proceso, mover un archivo puede ser lo mismo que renombrar un archivo.

Al igual que hemos utilizado cp para copiar ficheros, podríamos utilizar mv (move) para mover archivos. La diferencia entre estos dos comandos es que, mv en lugar de mantener el fichero original como hace cp, lo elimina tras la copia:

# Caso 1: Mueve un fichero
$ mv /home/tux/info.txt /home/manz/

# Caso 2: Mueve y renombra un fichero
$ mv /home/tux/info.txt /home/manz/tuxdata.txt

# Caso 3: Renombra un fichero
$ mv info.txt tuxdata.txt

Obsérvese que en el primer caso, se está moviendo un fichero a una ruta concreta, pero podemos utilizar mv para renombrar a la vez que movemos (como en el caso 2) o simplemente renombrar sin mover de ruta (caso 3).

De la misma forma que cp, el comando mv tiene los mismos parámetros que mencionamos.

Borrar ficheros

Al trabajar con archivos en Linux, con el tiempo es posible que no los necesites más y quieras borrarlos. Para ello existen algunos comandos interesantes.

Probablemente, otro de los comandos más utilizados en la terminal es rm (remove), que sirve para eliminar ficheros o carpetas de nuestro sistema. Hay que tener mucho cuidado con él, ya que una vez un fichero es eliminado, aunque no es imposible, es complicado recuperarlo.

ParámetroSignificado
-f (force)Fuerza a hacer el borrado, sin preguntar.
-r (recursive)Elimina recursivamente carpetas y su contenido.
-d (dir)Elimina carpetas vacías.
-v (verbose)Por defecto, rm trabaja en silencio. Con este parámetro muestra lo que está haciendo.

Como mencionamos anteriormente, el comando rm realmente no borra un fichero, sino que lo «marca» en el disco como reutilizable. Si la zona del disco donde residía es sobreescrita con otro fichero, probablemente sea imposible recuperarlo, pero en caso contrario hay cierta posibilidad.

Nota: Si deseas eliminar por completo un fichero, sin posibilidad de recuperación, es mejor utilizar el comando shred -u seguido del nombre del fichero a eliminar. Este comando sobreescribe con información aleatoria el fichero, y luego lo elimina (parámetro -u).

Si la filosofía por defecto del comando rm no te agrada, o eres una persona que suele eliminar ficheros por accidente, quizás te interese el comando rip (rm improved).

Se trata de una alternativa a rm desarrollada en Rust, que establece que al eliminar un archivo con rip, pasa a estar «muerto» en una zona del disco denominada «cementerio» (por defecto, /tmp/graveyard-user, donde user es el nombre de usuario), que hace las veces de papelera de reciclaje tétrica.

Si hemos borrado accidentalmente el fichero, podemos «resucitarlo» escribiendo rip -u (undelete) o simplemente acceder a los ficheros dentro de la estructura del cementerio. Si queremos vaciar el cementerio, basta con escribir rip -d (decompose) o eliminar la estructura de carpetas manualmente.

Otra alternativa similar a rm podría ser trash-cli.

¿Quién soy yo?

Soy Manz, vivo en Tenerife (España) y soy streamer partner en Twitch y profesor. Me apasiona el universo de la programación web, el diseño y desarrollo web y la tecnología en general. Aunque soy full-stack, mi pasión es el front-end, la terminal y crear cosas divertidas y locas.

Puedes encontrar más sobre mi en Manz.dev