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