@@ -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
|
||||||
|
|||||||
37
README.md
37
README.md
@@ -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
|
||||||
|
|||||||
20
topdir.sh
20
topdir.sh
@@ -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
|
||||||
|
|||||||
Referencia en una nueva incidencia
Block a user