fd es un programa para encontrar entradas en el sistema de archivos, una alternativa más simple, rápida y amigable que el comando tradicional find
- No soporta todas las funciones de
find, pero ofrece valores predeterminados razonables para los casos de uso más comunes
- Windows, macOS y Linux
- Sintaxis intuitiva: se puede usar de forma simple con el formato
fd PATTERN (más cómodo que find -iname '*PATTERN*')
- Soporte para expresiones regulares y patrones glob
- Recorrido paralelo de directorios para ofrecer un rendimiento rápido
- Resaltado con colores según el tipo de archivo (similar a
ls)
- Soporte para ejecución paralela de comandos
- Distinción inteligente entre mayúsculas y minúsculas: ignora mayúsculas/minúsculas por defecto, pero las distingue si el patrón incluye mayúsculas
- Ignora archivos y directorios ocultos por defecto
- Ignora patrones de
.gitignore por defecto
- El nombre del comando es 50% más corto que
find
Uso
- Buscar entradas que contengan un patrón en el directorio actual
fd netfl
- Permite búsquedas usando expresiones regulares
fd '^x.*rc$'
- Buscar en un directorio específico
fd passwd /etc
- Listar recursivamente todos los archivos bajo el directorio actual
fd
- Buscar un tipo de archivo específico (usando la opción
-e) fd -e md
- Buscar un nombre de archivo exacto (usando la opción
-g) fd -g libc.so /usr
- Buscar incluyendo archivos ocultos e ignorados (usando las opciones
-H, -I) fd -H pre-commit fd -I num_cpu
- Buscar en la ruta completa y no solo en el nombre del archivo (usando la opción
-p) fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'
- Ejecutar un comando para cada resultado encontrado (
-x) fd -e zip -x unzip
- Pasar todos los resultados encontrados a un solo comando (
-X) fd -g 'test_*.py' -X vim
- Sintaxis de marcadores de posición (placeholders)
- {}: ruta completa del resultado encontrado
- {.}: ruta sin la extensión del archivo
- {/}: nombre del archivo
- {//}: directorio padre
- {/.}: nombre del archivo sin extensión
- Permite excluir directorios o archivos específicos (usando la opción
-E) fd -H -E .git
- Se puede crear un archivo
.fdignore para definir patrones de exclusión globales
- Permite eliminar los archivos encontrados (
-X rm) fd -H '^\.DS_Store$' -tf -X rm
Opciones principales del comando
- -H: incluir archivos y directorios ocultos en la búsqueda
- -I: ignorar
.gitignore y .fdignore
- -p: buscar en la ruta completa
- -e: buscar una extensión específica
- -x: ejecutar un comando sobre los resultados encontrados
- -X: pasar todos los resultados encontrados a un solo comando
- -E: excluir un archivo o directorio específico
Comparación de rendimiento (benchmark)
- Resultado de pruebas de búsqueda con 750,000 directorios y 4 millones de archivos
- Rendimiento de
find: alrededor de 19.9 segundos
- Rendimiento de
fd: alrededor de 854.8 ms
- 23 veces más rápido que
find
Integración con otros programas
- Se pueden mostrar los resultados de
fd en fzf export FZF_DEFAULT_COMMAND='fd --type file'
- Mostrar la salida de
fd como menú en rofi fd --type f -e pdf . $HOME | rofi -dmenu
- Mostrar la salida en una estructura de árbol
fd | tree --fromfile
- Usar los resultados de búsqueda con
xargs fd -0 -e rs | xargs -0 wc -l
2 comentarios
Hay un plugin de neovim que usa fd, así que lo instalé y lo he estado usando hasta ahora, jaja.
Comentarios en Hacker News
fdpara buscar en directorios personalizados. Lo uso todos los días y es excelente.hyperfinetambién es una gran herramienta infravalorada.bat,fd,hexylyhyperfine.fd,bat,numbat,hexylyhyperfine, y ver capturas de pantalla en Terminal Trove.fd,bat,numbat,hyperfineyhexyl.fdyrgcoincidieran. Por ejemplo, tantofdcomorgtienen el flag--type, pero significan cosas distintas.fdsignifica archivo/directorio/enlace simbólico, etc., y enrgsignifica tipo MIME de archivo.fdtiene el flag--extension, perorgno.ripgrepen VS Code, pero en la línea de comandos usogrep.findpuede reemplazarse porfd,timeporhyperfineygrepporripgrep.t-rec, que convierteasciinemaa.gif, ykoji, para crear commits manualmente.fd. Me cuesta recordar cómo usar los argumentos defind, así que normalmente usofind . | grep what_i_am_looking_for.xargs.fdel recorrido de directorios con symlinks.fdtodos los días y lo instalo por defecto en cualquier equipo nuevo.finddurante mucho tiempo, pero no es precisamente cómodo de usar.find.fdtiene una opción para no ignorar, pero no la recuerdo, así que vuelvo afind.fdes tan difícil de recordar comotaryln.find, se me queda mejor grabado.