directus-bulk-fetch
v1.0.8
Published
CLI para download em massa de arquivos da coleção directus_files do Directus
Maintainers
Readme
directus-bulk-fetch
CLI para download em massa de arquivos da coleção directus_files do Directus.
Descrição
Este pacote fornece uma ferramenta de linha de comando interativa para conectar-se a uma instância Directus e fazer o download em massa de arquivos da coleção directus_files, com suporte a downloads paralelos, retry automático, filtros por data e muito mais.
Funcionalidades
- 🔐 Autenticação por token
- 📥 Download automático de arquivos
- 🚀 Downloads paralelos/simultâneos configuráveis
- 🔄 Retry automático com backoff exponencial
- ⏱️ Timeout configurável para requisições
- 🎯 Filtros por período de upload
- 💾 Detecção de arquivos já baixados (evita re-downloads)
- 📋 Modo resume: retoma downloads que falharam
- 📊 Relatório detalhado com estatísticas
- 💥 Rastreamento de falhas em JSON
- ⚙️ Configuração via arquivo .env ou modo interativo
Instalação
Via npm (Recomendado)
npm install -g directus-bulk-fetchOu com npx (sem instalação global):
npx directus-bulk-fetchConfiguração
Copie o arquivo .env.example para .env e configure as variáveis:
cp .env.example .envEdite o arquivo .env com suas credenciais:
# Configuração do Directus
DIRECTUS_URL=http://localhost:8055
DIRECTUS_TOKEN=seu-token-aqui
# Configuração de Rate Limit (intervalo em milissegundos entre requisições)
RATE_LIMIT_INTERVAL_MS=200
# Número de downloads simultâneos
CONCURRENT_DOWNLOADS=3
# Diretório de destino para os arquivos baixados
OUTPUT_DIR=./downloadsUso
Modo Interativo (Recomendado)
Se instalado globalmente:
directus-bulk-fetchCom npx:
npx directus-bulk-fetchMenu Interativo
O CLI apresenta as seguintes opções:
- Fazer download de arquivos: Inicia o processo de download com os parâmetros configurados
- Ver configuração atual: Exibe as configurações em uso
- Configurar credenciais: Permite alterar as credenciais para a sessão atual
- Sair: Encerra a aplicação
Parâmetros de Download
Durante o processo de download, você poderá configurar:
- Data de início: Filtrar arquivos a partir de uma data de upload
- Data de fim: Filtrar arquivos até uma data de upload
- Limite de arquivos: Quantidade máxima de arquivos a baixar (-1 para todos)
- Diretório de destino: Onde os arquivos serão salvos
- Intervalo entre requisições: Tempo em milissegundos entre cada lote de requisições (rate limiting)
- Número de downloads simultâneos: Quantidade de arquivos baixados em paralelo (1-10)
- Número de retries: Tentativas em caso de falha (1-10)
- Timeout: Tempo máximo de espera por requisição em milissegundos
- Modo resume: Baixar apenas arquivos que falharam anteriormente
Como Funciona
- Conexão: Conecta-se ao Directus usando a URL e token fornecidos
- Consulta: Busca registros da coleção
directus_filescom os filtros de data aplicados - Download em Lotes: Baixa arquivos em lotes paralelos (configurável) usando a API do Directus (
/assets/:id) - Retry com Backoff: Tenta novamente automaticamente em caso de falha, com espera exponencial
- Validação: Verifica se o arquivo já existe antes de baixar (evita duplicatas)
- Rastreamento de Falhas: Salva em JSON os arquivos que falharam após todas as tentativas
- Modo Resume: Permite retomar o download apenas dos arquivos que falharam
Exemplos de Uso
Download de todos os arquivos
npx directus-bulk-fetch
# Selecione "Fazer download de arquivos"
# Deixe todos os filtros vazios
# Defina limite como -1Download com período específico
npx directus-bulk-fetch
# Selecione "Fazer download de arquivos"
# Informe data de início: 2024-01-01
# Informe data de fim: 2024-12-31Download em modo resume (após falhas)
npx directus-bulk-fetch
# Selecione "Fazer download de arquivos"
# Responda "Sim" para "Modo resume"
# Apenas arquivos que falharam anteriormente serão baixadosNotas Técnicas
- ✅ Arquivos já existentes no diretório de destino não serão baixados novamente
- 🔄 O rate limiting ajuda a evitar sobrecarga no servidor Directus
- 💾 Falhas são salvas em
failed-downloads.jsonno diretório de destino - ⏱️ O retry usa backoff exponencial (1s, 2s, 3s, etc.)
- 🔗 URLs do Directus com barra final (
/) são tratadas corretamente - 🎯 Apenas arquivos com
filename_diskválido são processados - 🔐 Autenticação via query parameter para compatibilidade com
/assetsendpoint
Solução de Problemas
Erro 404 nos downloads
Verifique se:
- A URL do Directus está correta (pode ter ou não barra final)
- O token tem permissões para acessar a coleção
directus_files - Os arquivos existem fisicamente no storage do Directus
Downloads lentos
Aumente o número de downloads simultâneos no .env:
CONCURRENT_DOWNLOADS=5 # Aumentar de 3 para 5Muitos timeouts
Aumente o timeout no .env:
TIMEOUT_MS=60000 # 60 segundosRoadmap
- [ ] Suporte a diferentes formatos de arquivo (não apenas JPG)
- [ ] Buscar metadados do arquivo para nome correto
- [ ] Opção de escolher coleção customizada
- [ ] Progress bar visual
- [ ] Exportação de relatório em CSV
Licença
Ver arquivo LICENSE
