13 puntos por GN⁺ 2025-03-20 | 2 comentarios | Compartir por WhatsApp
  • 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

 
dbs0829 2025-03-20

Hay un plugin de neovim que usa fd, así que lo instalé y lo he estado usando hasta ahora, jaja.

 
GN⁺ 2025-03-20
Comentarios en Hacker News
  • Lancé un workflow de Alfred. Uso mucho fd para buscar en directorios personalizados. Lo uso todos los días y es excelente.
    • hyperfine también es una gran herramienta infravalorada.
  • Soy fan de sharkdp. Gracias por crear software tan genial que uso a diario.
    • Uso bat, fd, hexyl y hyperfine.
    • Si los ingenieros bien pagados donaran $10 al mes, internet sería un lugar mejor.
    • Hay muchas herramientas excelentes y deberíamos crear un ecosistema que las apoye.
  • Puedes instalar rápidamente fd, bat, numbat, hexyl y hyperfine, y ver capturas de pantalla en Terminal Trove.
    • Se proporcionan enlaces para fd, bat, numbat, hyperfine y hexyl.
    • Es posible instalarlo y ver capturas de pantalla.
  • Ojalá los flags de fd y rg coincidieran. Por ejemplo, tanto fd como rg tienen el flag --type, pero significan cosas distintas.
    • En fd significa archivo/directorio/enlace simbólico, etc., y en rg significa tipo MIME de archivo.
    • fd tiene el flag --extension, pero rg no.
    • Como el uso de ambas herramientas está muy correlacionado, sería útil que los flags con nombres similares se parecieran más.
  • La razón por la que no uso nuevas herramientas en Rust es que me cuesta recordar las opciones de las herramientas originales.
    • Uso ripgrep en VS Code, pero en la línea de comandos uso grep.
    • Mientras la herramienta funcione, no me importa en qué lenguaje esté escrita.
    • GNU Stow está escrito en Perl, pero es una de mis herramientas Unix favoritas.
    • Aunque las herramientas en Rust sean reemplazos directos, no las instalaría manualmente.
    • Como usuario, las mejoras de velocidad y la seguridad de memoria no son importantes.
    • Otros lenguajes como Go también garantizan seguridad de memoria y tienen una alta participación de la comunidad.
    • No me convence del todo la narrativa de que Rust es el salvador.
    • Si macOS o Ubuntu reemplazaran algo por alternativas en Rust sin afectar mi flujo de trabajo, no me molestaría.
  • Debería revisar Terminal Trove de vez en cuando.
    • Puedes encontrar reemplazos fáciles para herramientas que usas con frecuencia.
    • find puede reemplazarse por fd, time por hyperfine y grep por ripgrep.
    • También están t-rec, que convierte asciinema a .gif, y koji, para crear commits manualmente.
  • Voy a probar fd. Me cuesta recordar cómo usar los argumentos de find, así que normalmente uso find . | grep what_i_am_looking_for.
    • Me gusta cómo se integra con xargs.
    • No pude encontrar cómo maneja fd el recorrido de directorios con symlinks.
  • Uso mucho fd todos los días y lo instalo por defecto en cualquier equipo nuevo.
    • Usé find durante mucho tiempo, pero no es precisamente cómodo de usar.
    • Estoy 100% de acuerdo con la tendencia reciente de utilidades de reemplazo.
    • Puede que no conserven toda la flexibilidad del original, pero para los casos comunes son mucho más fáciles de usar.
  • Me resulta incómodo que ignore tantos directorios por defecto.
    • Cuando quiero saber dónde está algo en el sistema, uso find.
    • fd tiene una opción para no ignorar, pero no la recuerdo, así que vuelvo a find.
  • Me gustan las nuevas herramientas CLI en Rust, pero fd es tan difícil de recordar como tar y ln.
    • No es culpa de nadie.
    • Siempre tengo que volver a leer el manual.
    • A pesar de las rarezas de GNU find, se me queda mejor grabado.