Saltar a contenido

fd - Alternativa Rápida y Amigable para Find

Instalación

Platform Comando
Ubuntu/Debian sudo apt install fd-find (binary: fdfind)
Arch Linux sudo pacman -S fd
Fedora/RHEL sudo dnf install fd-find
Alpine Linux apk add fd
macOS (Homebrew) brew install fd
macOS (MacPorts) sudo port install fd
Windows (Scoop) scoop install fd
Windows (Chocolatey) choco install fd
Windows (Winget) winget install sharkdp.fd
Cargo (All platforms) cargo install fd-find
Snap sudo snap install fd

Comandos Básicos

Comando Descripción
fd filename Buscar archivos/directorios que coincidan con "filename"
fd pattern /path Buscar patrón en directorio específico
fd -e txt Encontrar todos los archivos con extensión .txt
fd -e js -e ts Encontrar archivos con múltiples extensiones (.js o .ts)
fd -t f pattern Encontrar solo archivos (no directorios)
fd -t d dirname Encontrar solo directorios
fd -t x Encontrar solo archivos ejecutables
fd -t l Encontrar solo enlaces simbólicos
fd -s Pattern Búsqueda sensible a mayúsculas y minúsculas (por defecto es insensible a mayúsculas y minúsculas)
fd -d 3 pattern Limitar la profundidad de búsqueda a 3 niveles
fd -H pattern Incluir archivos ocultos en la búsqueda
fd -I pattern No respetar las reglas de .gitignore
fd -a pattern Mostrar rutas absolutas en lugar de rutas relativas
fd -l pattern Show detailed listing (like ls -l)
fd -0 pattern Use null separator (for piping to xargs -0)
## Uso Avanzado
Comando Descripción
fd '^test.*\.js$' Usar patrón regex (archivos que comienzan con "test", que terminan con .js)
fd -g '*.{js,ts}' Utiliza patrones glob en lugar de regex
fd -F 'exact.string' Búsqueda de cadena fija (sin interpretación de regex)
fd -E node_modules -E '*.tmp' pattern Excluir patrones específicos de la búsqueda
fd --no-ignore pattern No utilices archivos .gitignore, .fdignore o .ignore
fd -L pattern Seguir enlaces simbólicos durante la búsqueda
fd --changed-within 2d Archivos modificados en los últimos 2 días
fd --changed-before 30d Archivos no modificados en los últimos 30 días
fd --size +100m Archivos mayores de 100MB
fd --size +10m --size -100m Archivos entre 10MB y 100MB
fd --owner username Archivos propiedad de usuario específico
fd --max-results 100 Limitar la salida a 100 resultados
fd -x rm {} Ejecutar comando en cada resultado (eliminar archivos)
fd -X convert {} {.}.png Ejecutar comando con múltiples argumentos (conversión por lotes)
fd --color never pattern Deshabilitar salida coloreada
fd --strip-cwd-prefix pattern Remove ./ prefix from results
fd -H -t d "^\." Encontrar directorios ocultos (que comienzan con punto)
fd -t f -x du -h {} Mostrar tamaños de archivos para todas las coincidencias
fd pattern --threads 1 Usar single thread (para debugging)
fd --base-directory /path pattern Cambiar directorio base para búsqueda
## Configuración

Archivos de Configuración

Ubicaciones de archivos de ignorados globales: - Linux/macOS:~/.config/fd/ignoreo~/.fdignore - Windows:%APPDATA%\fd\ignore

Específico del proyecto:.fdignoreen la raíz del proyecto

Ejemplo de Archivo .fdignore

# Ignore dependency directories
node_modules/
vendor/
target/

# Ignore build outputs
build/
dist/
*.o
*.pyc

# Ignore IDE directories
.idea/
.vscode/
*.swp

# Ignore log files
*.log
logs/

# Ignore temporary files
*.tmp
*~
.DS_Store

# Ignore specific paths
/cache/
/tmp/

Variables de Entorno

# Set default options for all fd commands
export FD_OPTS="--hidden --follow --exclude .git"

# Control colorization (fd respects LS_COLORS)
export LS_COLORS="di=34:ln=35:ex=31:*.txt=33"

Alias Útiles

# Add to ~/.bashrc or ~/.zshrc

# Search including hidden files
alias fdh='fd -H'

# Search ignoring .gitignore
alias fda='fd -I'

# Find large files
alias fdl='fd --size +100m'

# Find recent files (last 24 hours)
alias fdr='fd --changed-within 1d'

# Find and preview with fzf and bat
alias fdf='fd -t f | fzf --preview "bat --color=always {}"'

# Find and edit with vim
alias fdv='fd -t f | fzf | xargs -r vim'

Casos de Uso Comunes

Caso de Uso 1: Limpiar Artefactos de Compilación

# Remove all Python compiled files
fd -e pyc -e pyo -x rm {}

# Remove all node_modules directories (up to 2 levels deep)
fd -t d -d 2 '^node_modules$' -x rm -rf {}

# Clean old log files (older than 30 days)
fd -e log --changed-before 30d -x rm {}

# Remove all temporary files
fd -g '*.tmp' -g '*~' -g '*.swp' -x rm {}

Caso de Uso 2: Búsqueda y Análisis de Código

# Find all JavaScript/TypeScript files modified in last week
fd -e js -e ts -e jsx -e tsx --changed-within 7d

# Count lines of code in Rust project
fd -e rs -x wc -l {} | awk '{sum+=$1} END {print sum}'

# Find all TODO comments in Python files
fd -e py -x grep -Hn "TODO:" {}

# Find largest source files
fd -e java -e kt -x du -h {} | sort -hr | head -20

# Find files containing specific function name
fd -e cpp -e hpp -x grep -l "myFunction" {}

Caso de Uso 3: Gestión de Archivos de Registro

# Find and compress logs older than 7 days
fd -e log --changed-before 7d -x gzip {}

# Search for errors in recent logs
fd -e log --changed-within 1d -x grep -i "error" {} \;

# Find large log files (over 100MB)
fd -e log --size +100m -l

# Archive old logs to separate directory
fd -e log --changed-before 30d -x mv {} /archive/logs/

Caso de Uso 4: Gestión de Docker y Contenedores

# Find all Dockerfiles in project
fd -g '*Dockerfile*' -g 'Dockerfile.*'

# Find all docker-compose files
fd -g 'docker-compose*.yml' -g 'docker-compose*.yaml'

# Find and validate Dockerfiles
fd '^Dockerfile$' -x docker build --dry-run -f {} .

# Find container-related configs
fd -e yml -e yaml -x grep -l "kind:" {} \;

Caso de Uso 5: Auditoría de Seguridad y Permisos

# Find world-writable files (security risk)
fd -t f -x sh -c 'test -w {} && ls -l {}'

# Find SUID/SGID binaries
fd -t x -x sh -c 'test -u {} -o -g {} && ls -l {}'

# Find files with passwords in name
fd -i password -i passwd -i secret

# Find configuration files with potential secrets
fd -g '*.conf' -g '*.cfg' -g '*.ini' -x grep -i "password\|secret\|key" {}

# Find SSH keys
fd -g 'id_rsa*' -g 'id_ed25519*' -H

Mejores Prácticas

  • Usar archivos.fdignore: Crear patrones de ignorados específicos del proyecto para acelerar búsquedas y reducir ruido
  • Aprovechar valores predeterminados inteligentes:fdrespeta automáticamente

Would you like me to fill in the remaining placeholders with specific translations?.gitignore- usar-Isolo cuando necesites archivos ignorados - Combinar con otras herramientas: Canalizarfdsalida axargs,grep,fzfpara flujos de trabajo potentes - Usar-0conxargs: Siempre usarfd -0 | xargs -0para nombres de archivos con espacios o caracteres especiales - Preferir-xsobre tuberías: Usarfd -x command {}en lugar de canalizar axargspara un mejor rendimiento - Establecer límites de profundidad: Usar-dbandera en árboles de directorios grandes para prevenir recursión excesiva - Usar filtros de tipo específicos: Filtrar por tipo (-t f,-t d) temprano para reducir el espacio de búsqueda - Crear alias: Configurar alias de shell para patrones defdfrecuentemente usados para ahorrar escritura - Combinar filtros de tiempo y tamaño: Usar--changed-withiny--sizejuntos para seleccionar archivos con precisión - Probar patrones de regex: Usar probadores de regex en línea antes de búsquedasfdcomplejas para verificar patrones

Resolución de problemas

Problema Solución
Command not found: fd On Debian/Ubuntu, binary is fdfind. Create symlink: ln -s $(which fdfind) ~/.local/bin/fd
Too many results Use depth limit -d 3, exclude patterns -E node_modules, or filter by type -t f
Not finding hidden files Add -H flag to include hidden files, or -HI to also ignore .gitignore rules
Search is too slow Reduce depth with -d, exclude large directories with -E, or use --threads to control parallelism
Regex not matching Remember fd uses case-insensitive search by default. Use -s for case-sensitive or -F for literal strings
Files in .gitignore showing up This shouldn't happen by default. Check for -I or --no-ignore flags in aliases or FD_OPTS
Special characters in filenames breaking commands Use -0 with xargs -0 or use -x flag instead: fd pattern -x command {}
Cannot execute command on results Check if using correct syntax: -x for individual execution, -X for batch execution
Color output in logs/files Disable with --color never or redirect stderr: fd pattern 2>/dev/null
Permission denied errors Redirect stderr to ignore: fd pattern 2>/dev/null or run with appropriate permissions
Not respecting .fdignore file Ensure .fdignore is in project root or ~/.config/fd/ignore. Check file syntax matches .gitignore format