detomas.net Curso de Bash desde cero
Descargar PDF

Curso de Bash desde cero / Capítulo 3

Gestión de archivos

Sistema de archivos Unix

Los sistemas de archivos Unix están organizados por un único árbol jerárquico que empieza por /, llamado raíz.

Directorios por defecto más típicos

Puedes explorar un directorio sin encontrarte en él haciendo referencia a su ruta absoluta o relativa.

Manipulación

Creación de un archivo

Creación de un directorio

Eliminación de un directorio vacío

Copia de un archivo o directorio

Movimiento o renombramiento de un archivo o directorio

Eliminación de archivos o directorios

Precaución

El comando rm no envía nada a la papelera. Lo que borras, borrado queda. Cuidado con lo que escribes.

La opción -f (force) de rm -rf es especialmente peligrosa: no pide confirmación y ni siquiera avisa si el directorio no existía. Antes de lanzar un rm con comodines, prueba el mismo patrón con ls para ver exactamente qué vas a borrar.

Comodines

Los comodines permiten actuar sobre muchos archivos a la vez sin escribirlos uno a uno. Funcionan con cualquier comando, no solo con ls.

Comodín Significa
* Cero o más caracteres cualesquiera
? Exactamente un carácter
[abc] Un carácter que sea a, b o c
[0-9] Un carácter que sea un dígito
[!a] Un carácter que no sea a

Ejemplos:

ls *.md              # todos los .md
ls 03*               # los que empiezan por 03
ls 03*.txt           # empiezan por 03 y acaban en .txt
ls ?????*            # los que tienen 5 caracteres o más
ls informe[0-9].txt  # informe1.txt, informe2.txt... pero no informe10.txt
rm ?.txt             # los de un solo carácter de nombre: a.txt, 1.txt

Precaución

Antes de un rm con comodines, lanza el mismo patrón con ls. Es un segundo de trabajo y te enseña exactamente qué vas a borrar:

ls a????        # primero miro
rm a????        # y si es lo que quiero, ahora sí

Expansión de llaves

Las llaves no son un comodín: no buscan archivos existentes, sino que generan texto. Son comodísimas para crear cosas:

touch nota{1..5}.txt        # crea nota1.txt ... nota5.txt
mkdir -p proyecto/{src,doc,test}   # crea las tres carpetas de golpe
cp notas.txt notas.txt.bak         # lo de siempre...
cp notas.txt{,.bak}                # ...abreviado

Buscar archivos

tree muestra la estructura en forma de árbol:

tree           # el árbol desde aquí
tree -a        # incluyendo los ocultos
tree -L 2      # solo dos niveles de profundidad

find busca archivos por lo que le digas. Es más potente de lo que parece:

find . -name "notas.txt"      # por nombre exacto, desde aquí
find . -iname "*.LOG"         # sin distinguir mayúsculas
find . -type d                # solo directorios
find . -type f -name "*.sh"   # solo archivos, y que acaben en .sh
find . -size +10M             # los que ocupan más de 10 MB
find . -mtime -7              # modificados en los últimos 7 días

Y puede ejecutar algo sobre lo que encuentra:

find . -name "*.tmp" -delete            # borrarlos
find . -name "*.sh" -exec chmod +x {} \;   # darles permiso de ejecución

En -exec, las llaves {} son «cada archivo encontrado», y el \; marca dónde acaba el comando.

Precaución

find con -delete o -exec rm borra sin preguntar. Ejecuta siempre primero la búsqueda a secas para ver la lista, y solo después añade la acción.

Comprimir y descomprimir

Un archivo comprimido junta muchos archivos en uno y ocupa menos. En Linux lo habitual es tar:

# Comprimir una carpeta
tar -czf copia.tar.gz mi_carpeta

# Ver qué hay dentro sin extraer nada
tar -tzf copia.tar.gz

# Extraer
tar -xzf copia.tar.gz

Las letras de tar se entienden mejor sabiendo qué significan:

Letra Significa
c create: crear un archivo nuevo
x extract: extraer
t list: ver el contenido
z comprimir con gzip (el .gz del nombre)
f el siguiente argumento es el nombre del archivo

También existe zip, más habitual si vas a compartir con alguien que use Windows:

zip -r copia.zip mi_carpeta
unzip copia.zip

Enlaces simbólicos

Un enlace simbólico es un acceso directo: un archivo que apunta a otro sitio.

ln -s /ruta/muy/larga/al/archivo.txt atajo.txt

Al listarlo con ls -l se reconoce por la l del principio y la flecha:

lrwxrwxrwx 1 nica nica 9 Jul 30 15:10 atajo.txt -> archivo.txt

Si borras el enlace no borras el original. Pero si borras el original, el enlace se queda apuntando al vacío (enlace roto).

Ejercicios

  1. Crea un directorio.

  2. Elimina el directorio que acabas de crear.

  3. Copia un archivo en el directorio actual y fuera de Este.

  4. Mueve un archivo del directorio actual.

  5. Cambia el nombre del archivo que acabas de mover.

  6. Lista todos los archivos de un tipo usando un comodín.

  7. Elimina un directorio de manera recursiva (cuidado con lo que vas a borrar).

  8. Elimina todos los archivos de un mismo tipo (cuidado con lo que vas a borrar).

  9. Utiliza el comando tree.

  10. Busca un archivo concreto en el directorio actual utilizando find.