fix .topdirignore

Signed-off-by: ale <ale@manalejandro.com>
Este commit está contenido en:
ale
2025-11-01 17:35:58 +01:00
padre 5e520b42df
commit b12c3ebfa1
Se han modificado 3 ficheros con 70 adiciones y 18 borrados

Ver fichero

@@ -2,6 +2,13 @@
# Archivo de exclusiones para topdir.sh # Archivo de exclusiones para topdir.sh
# Sintaxis similar a .gitignore # Sintaxis similar a .gitignore
# IMPORTANTE: Para excluir carpetas, simplemente pon el nombre
# El script automáticamente excluye recursivamente (añade /*)
# Estos tres formatos son equivalentes:
# logs
# logs/
# logs/*
# Logs y temporales # Logs y temporales
*.log *.log
*.tmp *.tmp
@@ -9,16 +16,16 @@
*.swp *.swp
*.bak *.bak
# Directorios de build # Directorios de build (excluye recursivamente)
dist/* dist
build/* build
out/* out
target/* target
# Dependencias # Dependencias (excluye recursivamente)
node_modules/* node_modules
vendor/* vendor
__pycache__/* __pycache__
# Archivos compilados # Archivos compilados
*.pyc *.pyc
@@ -28,8 +35,8 @@ __pycache__/*
*.class *.class
# IDEs # IDEs
.vscode/* .vscode
.idea/* .idea
*.sublime-* *.sublime-*
# Sistema operativo # Sistema operativo
@@ -38,5 +45,5 @@ Thumbs.db
desktop.ini desktop.ini
# Git # Git
.git/* .git
.gitignore .gitignore

Ver fichero

@@ -123,27 +123,54 @@ deleted,"./old.log"
Excluye patrones específicos (puede repetirse): Excluye patrones específicos (puede repetirse):
```bash ```bash
# Excluir logs y temporales # Excluir extensiones
./topdir.sh --exclude "*.log" --exclude "*.tmp" /data ./topdir.sh --exclude "*.log" --exclude "*.tmp" /data
# Excluir directorios completos # Excluir carpetas completas (recursivamente)
./topdir.sh --exclude "node_modules" --exclude "logs" /project
# O con formato explícito:
./topdir.sh --exclude "node_modules/*" --exclude ".git/*" /project ./topdir.sh --exclude "node_modules/*" --exclude ".git/*" /project
# Excluir subdirectorios específicos
./topdir.sh --exclude "src/test/*" --exclude "docs/drafts" /project
``` ```
**Tip**: Si el patrón es solo un nombre de carpeta (sin `*` ni `/` al final), el script verifica si existe como directorio y automáticamente añade `/*` para exclusión recursiva.
#### Archivo .topdirignore #### Archivo .topdirignore
Crea un archivo `.topdirignore` en el directorio monitoreado con patrones (similar a `.gitignore`): Crea un archivo `.topdirignore` en el directorio monitoreado con patrones (similar a `.gitignore`):
```bash ```bash
# .topdirignore # .topdirignore
# Extensiones - excluye archivos con estas extensiones en cualquier ubicación
*.log *.log
*.tmp *.tmp
node_modules/*
.git/*
__pycache__/*
*.pyc *.pyc
# Carpetas - excluye recursivamente (automático)
node_modules
.git
__pycache__
cache
logs
build
# También puedes usar estos formatos (equivalentes):
node_modules/
node_modules/*
# Patrones específicos
temp/*
dist/*.js
``` ```
**Importante**: Para excluir carpetas, simplemente pon el nombre de la carpeta. El script automáticamente lo convierte a exclusión recursiva (añade `/*`). Los siguientes formatos son equivalentes:
- `logs` → excluye `logs/*` (todo dentro de logs/)
- `logs/` → excluye `logs/*`
- `logs/*` → excluye `logs/*`
Luego ejecuta normalmente: Luego ejecuta normalmente:
```bash ```bash

Ver fichero

@@ -148,8 +148,26 @@ fi
find_cmd=(find . -type f ! -name '.topdir_snapshot' ! -name '.topdirignore') find_cmd=(find . -type f ! -name '.topdir_snapshot' ! -name '.topdirignore')
for pattern in "${EXCLUDE_PATTERNS[@]}"; do for pattern in "${EXCLUDE_PATTERNS[@]}"; do
# Normalizar el patrón:
# Si el patrón no contiene /* ni * al final, y es un directorio, añadir /*
# Esto permite que "logs" se convierta en "logs/*" automáticamente
normalized_pattern="$pattern"
# Si el patrón no tiene wildcards ni slash al final
if [[ "$pattern" != *\** && "$pattern" != */ ]]; then
# Si existe como directorio, añadir /* para exclusión recursiva
if [[ -d "./$pattern" ]]; then
normalized_pattern="$pattern/*"
fi
fi
# Remover / final si existe (para que "logs/" -> "logs/*")
if [[ "$normalized_pattern" == */ && "$normalized_pattern" != *\* ]]; then
normalized_pattern="${normalized_pattern}*"
fi
# Convertir pattern a formato find -path # Convertir pattern a formato find -path
find_cmd+=(! -path "./$pattern") find_cmd+=(! -path "./$normalized_pattern")
done done
# Generar nuevo snapshot: compute hash para cada archivo regular # Generar nuevo snapshot: compute hash para cada archivo regular