Copias de seguridad

restic backup --files-from: lista de rutas, comentarios y rutas que no existen

Publicado el 29 de octubre de 2026Última revisión: 29 de octubre de 20263 min de lectura

Resultado de la prueba

una ruta inexistente en la lista solo da un aviso y el backup termina con exit 0; los comentarios con # se ignoran con --files-from y no con --files-from-verbatim; las rutas con espacios funcionan sin comillas.

Contenido

Este artículo no contiene enlaces de afiliado.

restic backup --files-from lista.txt copia las rutas de un fichero en lugar de pasarlas por línea de comandos. Es cómodo, pero se probaron tres detalles que importan en un script desatendido.

Condiciones: restic 0.16.4 en Linux arm64, repositorio local, tres carpetas pequeñas (una con espacio en el nombre), contraseña desechable. Script completo al final.

Resultados

Caso Resultado
Lista con una carpeta y un fichero ambos entran en el snapshot, exit 0
Ruta con espacio, sin comillas funciona, exit 0
Línea inexistente en la lista aviso does not match any files, skipping, el resto se copia, exit 0
Comentario # ... y línea en blanco con --files-from ignorados, exit 0
Misma lista con --files-from-verbatim el comentario se trata como ruta: # comentario does not exist, skipping, exit 0

Lo que debes saber

El caso peligroso es el tercero: si una carpeta de la lista desaparece (disco sin montar, ruta con errata), el backup sigue y termina con éxito, solo con una línea de aviso. Si usas una lista, comprueba que las rutas existen antes (test -e) o revisa la salida del backup. Esto no se probó con una ruta que existe pero no se puede leer.

Usa --files-from-verbatim si tus nombres de fichero pueden empezar por # o contener caracteres especiales, y escribe una ruta por línea sin comentarios.

Relacionado: códigos de salida de restic y qué se copiaría con --dry-run.

Script completo

#!/bin/bash
# restic backup --files-from / --files-from-verbatim. Usage: test-restic-files-from.sh WORKDIR
W=$1; rm -rf "$W"; mkdir -p "$W/datos/a" "$W/datos/b" "$W/datos/con espacio"
export RESTIC_PASSWORD=prueba-desechable
R="$W/repo"; restic init -r "$R" >/dev/null
echo 1 > "$W/datos/a/uno.txt"; echo 2 > "$W/datos/b/dos.txt"; echo 3 > "$W/datos/con espacio/tres.txt"
ls_() { restic -r "$R" ls latest | grep -E '\.txt$' | sed "s|.*datos/||" | sort | tr '\n' ' '; echo; }
echo "== 1) --files-from con carpeta y fichero"
printf '%s\n' "$W/datos/a" "$W/datos/b/dos.txt" > "$W/lista.txt"
restic -r "$R" backup --files-from "$W/lista.txt" --quiet; echo "exit=$?"; ls_
echo "== 2) ruta con espacio, sin comillas"
printf '%s\n' "$W/datos/con espacio" > "$W/lista2.txt"
restic -r "$R" backup --files-from "$W/lista2.txt" --quiet; echo "exit=$?"; ls_
echo "== 3) ruta inexistente en la lista"
printf '%s\n' "$W/datos/a" "$W/datos/no-existe" > "$W/lista3.txt"
restic -r "$R" backup --files-from "$W/lista3.txt" --quiet 2>&1 | tail -2; echo "exit=${PIPESTATUS[0]}"
echo "== 4) comentario # y linea en blanco"
printf '# comentario\n\n%s\n' "$W/datos/b" > "$W/lista4.txt"
restic -r "$R" backup --files-from "$W/lista4.txt" --quiet; echo "exit=$?"; ls_
echo "== 5) --files-from-verbatim con la misma lista"
restic -r "$R" backup --files-from-verbatim "$W/lista4.txt" --quiet 2>&1 | tail -2; echo "exit=${PIPESTATUS[0]}"; ls_