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
# 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
*.log
*.tmp
@@ -9,16 +16,16 @@
*.swp
*.bak
# Directorios de build
dist/*
build/*
out/*
target/*
# Directorios de build (excluye recursivamente)
dist
build
out
target
# Dependencias
node_modules/*
vendor/*
__pycache__/*
# Dependencias (excluye recursivamente)
node_modules
vendor
__pycache__
# Archivos compilados
*.pyc
@@ -28,8 +35,8 @@ __pycache__/*
*.class
# IDEs
.vscode/*
.idea/*
.vscode
.idea
*.sublime-*
# Sistema operativo
@@ -38,5 +45,5 @@ Thumbs.db
desktop.ini
# Git
.git/*
.git
.gitignore

Ver fichero

@@ -123,27 +123,54 @@ deleted,"./old.log"
Excluye patrones específicos (puede repetirse):
```bash
# Excluir logs y temporales
# Excluir extensiones
./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
# 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
Crea un archivo `.topdirignore` en el directorio monitoreado con patrones (similar a `.gitignore`):
```bash
# .topdirignore
# Extensiones - excluye archivos con estas extensiones en cualquier ubicación
*.log
*.tmp
node_modules/*
.git/*
__pycache__/*
*.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:
```bash

Ver fichero

@@ -148,8 +148,26 @@ fi
find_cmd=(find . -type f ! -name '.topdir_snapshot' ! -name '.topdirignore')
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
find_cmd+=(! -path "./$pattern")
find_cmd+=(! -path "./$normalized_pattern")
done
# Generar nuevo snapshot: compute hash para cada archivo regular