Thu. Sep 19th, 2024

An ingenious way to search and locate files in your file system

By admin Jan 29, 2024

fd es un programa para encontrar entradas en su sistema de archivos. Es una alternativa simple, rápida y fácil de usar a find. Si bien no pretende apoyar a todos findGracias a su poderosa funcionalidad, proporciona valores predeterminados sensatos (obstinados) para la mayoría de los casos de uso.

Características

  • Sintaxis intuitiva: fd PATTERN en lugar de find -iname '*PATTERN*'.
  • Expresión regular (predeterminada) y patrones basados ​​en globos.
  • Muy rapido debido al recorrido de directorio paralelizado.
  • Utiliza colores para resaltar diferentes tipos de archivos (igual que ls).
  • Soportes ejecución de comandos en paralelo
  • Caso inteligente: la búsqueda no distingue entre mayúsculas y minúsculas de forma predeterminada. Cambia a distinguir entre mayúsculas y minúsculas si el patrón contiene un carácter en mayúscula*.
  • Ignora directorios y archivos ocultos de forma predeterminada.
  • Ignora patrones de tu .gitignorepor defecto.
  • El nombre del comando es un 50% más corto.* que find :-).

¿Cómo utilizar?

Primero, para obtener una descripción general de todas las opciones de línea de comando disponibles, puede ejecutar fd -h para un mensaje de ayuda conciso o fd --help para una versión más detallada.

fd está diseñado para encontrar entradas en su sistema de archivos. La búsqueda más básica que puedes realizar es ejecutar fd con un único argumento: el patrón de búsqueda. Por ejemplo, supongamos que desea encontrar un script antiguo suyo (el nombre incluido netflix):

> fd netfl Software/python/imdb-ratings/netflix-details.py

Si se llama con un solo argumento como este, fd busca en el directorio actual de forma recursiva cualquier entrada que contenga el patrón. netfl.

El patrón de búsqueda se trata como una expresión regular. Aquí buscamos entradas que comiencen con x y terminar con rc:

> cd /etc > fd '^x.*rc$'X11/xinit/xinitrc X11/xinit/xserverrc

La sintaxis de expresión regular utilizada por fd es documentado aquí.

Especificación del directorio raíz

Si queremos buscar en un directorio específico, se puede dar como segundo argumento a fd:

> fd contraseña /etc /etc/default/passwd /etc/pam.d/passwd /etc/passwd

Listar todos los archivos, de forma recursiva

Se puede llamar a fd sin argumentos. Esto es muy útil para obtener una descripción general rápida de todas las entradas en el directorio actual, de forma recursiva (similar a ls -R):

> cd fd/pruebas > fd testenv testenv/mod.rs pruebas.rs

Si desea utilizar esta funcionalidad para enumerar todos los archivos en un directorio determinado, debe utilizar un patrón general como . o ^:

>fd. fd/tests/ testenv testenv/mod.rs tests.rs

Buscando una extensión de archivo particular

A menudo nos interesan todos los archivos de un tipo concreto. Esto se puede hacer con el -e (o --extension) opción. Aquí buscamos todos los archivos Markdown en el repositorio fd:

> cd fd > fd -e md CONTRIBUTING.md README.md

El -e La opción se puede utilizar en combinación con un patrón de búsqueda:

> fd -e rs mod src/fshelper/mod.rs src/lscolors/mod.rs pruebas/testenv/mod.rs

Buscando un nombre de archivo en particular

Para buscar archivos con exactamente el patrón de búsqueda proporcionado, utilice el -g (o --glob) opción:

> fd -g libc.so /usr /usr/lib32/libc.so /usr/lib/libc.so

Archivos ocultos e ignorados

De forma predeterminada, fd no busca directorios ocultos y no muestra archivos ocultos en los resultados de la búsqueda. Para deshabilitar este comportamiento, podemos usar el -H (o --hidden) opción:

> fd compromiso previo > fd -H compromiso previo .git/hooks/pre-commit.sample

Si trabajamos en un directorio que es un repositorio Git (o incluye repositorios Git), fd no busca carpetas (y no muestra archivos) que coincidan con uno de los .gitignore patrones. Para deshabilitar este comportamiento, podemos usar el -I (o --no-ignore) opción:

> fd num_cpu > fd -I num_cpu objetivo/debug/deps/libnum_cpus-f5ce7ef99006aa05.rlib

Para buscar realmente todos los archivos y directorios, simplemente combine las funciones ocultas e ignoradas para mostrar todo (-HI).

Coincidiendo con el camino completo

De forma predeterminada, fd solo coincide con el nombre de cada archivo. Sin embargo, utilizando el --full-path o -p opción, puede compararla con la ruta completa.

> fd -p -g '**/.git/config'> fd -p '.*/lesson-\d+/[a-z]+.(jpg|png)'

Ejecución de comando

En lugar de simplemente mostrar los resultados de la búsqueda, a menudo desea hacer algo con ellos. fd proporciona dos formas de ejecutar comandos externos para cada uno de los resultados de su búsqueda:

  • El -x/--exec La opción ejecuta un comando externo para cada uno de los resultados de la búsqueda (en paralelo).
  • El -X/--exec-batch La opción inicia el comando externo una vez, con todos los resultados de la búsqueda como argumentos.

Ejemplos

Encuentre recursivamente todos los archivos zip y descomprímalos:

fd -e zip -x descomprimir

Si hay dos archivos de este tipo, file1.zip y backup/file2.zipesto se ejecutaría unzip file1.zip y unzip backup/file2.zip. Los dos unzip Los procesos se ejecutan en paralelo (si los archivos se encuentran lo suficientemente rápido).

Encuentra todos *.h y *.cpp archivos y formatearlos automáticamente in situ con clang-format -i:

fd -eh -e cpp -x formato-clang -i

Observe cómo el -i opción de clang-format se puede pasar como un argumento separado. Por eso ponemos el -x última opción.

Encuentra todos test_*.py archivos y ábrelos en tu editor favorito:

fd -g 'prueba_*.py' -X vim

Tenga en cuenta que utilizamos capital -X aquí para abrir un solo vim instancia. Si hay dos archivos de este tipo, test_basic.py y lib/test_advanced.pyesto se ejecutará vim test_basic.py lib/test_advanced.py.

Para ver detalles como permisos de archivos, propietarios, tamaños de archivos, etc., puede indicar fd para mostrarlos corriendo ls para cada resultado:

fd… -X ls -lhd –color=siempre

Este patrón es tan útil que fd proporciona un atajo. Puedes usar el -l/--list-d
etails
opción para ejecutar ls De este modo: fd … -l.

El -X La opción también es útil al combinar fd con ripgrep (rg) para buscar dentro de una determinada clase de archivos, como todos los archivos fuente de C++:

fd -e cpp -e cxx -eh -e hpp -X rg 'std::cout'

Convertir todo *.jpg archivos a *.png archivos:

fd -e jpg -x convertir {} {.}.png

Aquí, {} es un marcador de posición para el resultado de la búsqueda. {.} es igual, sin la extensión del archivo. Consulte a continuación para obtener más detalles sobre la sintaxis del marcador de posición.

La salida del terminal de los comandos se ejecuta desde subprocesos paralelos usando -x no será entrelazado ni confuso, por lo que fd -x se puede utilizar para paralelizar rudimentariamente una tarea ejecutada en muchos archivos. Un ejemplo de esto es calcular la suma de verificación de cada archivo individual dentro de un directorio.

fd -tf -x md5sum > file_checksums.txt

Sintaxis del marcador de posición

El -x y -X Las opciones toman una plantilla de comando como una serie de argumentos (en lugar de una sola cadena). Si desea agregar opciones adicionales a fd después de la plantilla de comando, puede terminarla con un \;.

La sintaxis para generar comandos es similar a la de Paralelo GNU:

  • {}: un token de marcador de posición que se reemplazará con la ruta del resultado de la búsqueda (documents/images/party.jpg).
  • {.}: Como {}pero sin la extensión de archivo (documents/images/party).
  • {/}: un marcador de posición que será reemplazado por el nombre base del resultado de la búsqueda (party.jpg).
  • {//}: El padre de la ruta descubierta (documents/images).
  • {/.}: El nombre base, sin la extensión (party).

Si no incluye un marcador de posición, fd agrega automáticamente un {} al final.

Ejecución paralela versus ejecución en serie

Para -x/--execpuede controlar el número de trabajos paralelos utilizando el -j/--threads opción. Usar --threads=1 para ejecución en serie.

Excluyendo archivos o directorios específicos

A veces queremos ignorar los resultados de búsqueda de un subdirectorio específico. Por ejemplo, es posible que deseemos buscar todos los archivos y directorios ocultos (-H) pero excluye todas las coincidencias de .git directorios. Podemos usar el -E (o --exclude) opción para esto. Toma un patrón global arbitrario como argumento:

> fd-H-E .git…

También podemos usar esto para omitir directorios montados:

> fd -E /mnt/unidad-externa…

.. o para omitir ciertos tipos de archivos:

>fd -E '*.bak'…

Para hacer que patrones de exclusión como estos sean permanentes, puede crear un .fdignore archivo. ellos trabajan como .gitignore archivos, pero son específicos de fd. Por ejemplo:

> cat ~/.fdignore /mnt/unidad-externa *.bak

Nota: fd también apoya .ignore archivos que son utilizados por otros programas como rg o ag.

Si quieres fd Para ignorar estos patrones globalmente, puedes ponerlos en fdEl archivo de ignoración global. Este suele estar situado en ~/.config/fd/ignore en macOS o Linux, y %APPDATA%\fd\ignore en Windows.

Eliminar archivos

Puedes usar fd para eliminar todos los archivos y directorios que coincidan con su patrón de búsqueda. Si solo desea eliminar archivos, puede utilizar el --exec-batch/-X opción de llamar rm. Por ejemplo, para eliminar recursivamente todos .DS_Store archivos, ejecute:

> fd -H '^\.DS_Store$' -tf -X rm

Si no está seguro, llame siempre fd sin -X rm primero. Alternativamente, use rms opción “interactiva”:

> fd -H '^\.DS_Store$' -tf -X rm -i

Si también desea eliminar una determinada clase de directorios, puede utilizar la misma técnica. tendrás que usar rms --recursive/-r bandera para eliminar directorios.

Nota: hay escenarios en los que se utiliza fd … -X rm -r puede causar condiciones de carrera: si tienes un camino como …/foo/bar/foo/… y desea eliminar todos los directorios nombrados foopuedes terminar en una situación en la que el exterior foo El directorio se elimina primero, lo que genera errores (inofensivos) “'foo/bar/foo': No existe tal archivo o directorio” en el rm llamar.

Opciones de línea de comando

Esta es la salida de fd -h. Para ver el conjunto completo de opciones de línea de comandos, use fd --help que también incluye un texto de ayuda mucho más detallado.

Usage: fd [OPTIONS] [pattern] [path]...

Arguments:
[pattern] the search pattern (a regular expression, unless '--glob' is used; optional)
[path]... the root directories for the filesystem search (optional)

Options:
-H, --hidden Search hidden files and directories
-I, --no-ignore Do not respect .(git|fd)ignore files
-s, --case-sensitive Case-sensitive search (default: smart case)
-i, --ignore-case Case-insensitive search (default: smart case)
-g, --glob Glob-based search (default: regular expression)
-a, --absolute-path Show absolute instead of relative paths
-l, --list-details Use a long listing format with file metadata
-L, --follow Follow symbolic links
-p, --full-path Search full abs. path (default: filename only)
-d, --max-depth <depth> Set maximum search depth (default: none)
-E, --exclude <pattern> Exclude entries that match the given glob pattern
-t, --type <filetype> Filter by type: file (f), directory (d), symlink (l),
executable (x), empty (e), socket (s), pipe (p)
-e, --extension <ext> Filter by file extension
-S, --size <size> Limit results based on the size of files
--changed-within <date|dur> Filter by file modification time (newer than)
--changed-before <date|dur> Filter by file modification time (older than)
-o, --owner <user:group> Filter by owning user and/or group
-x, --exec <cmd>... Execute a command for each search result
-X, --exec-batch <cmd>... Execute a command with all search results at once
-c, --color <when> When to use colors [default: auto] [possible values: auto,
always, never]
-h, --help Print help (see more with '--help')
-V, --version Print version

tecnología

  • Óxido

Licencia

El proyecto se publica bajo licencias Apache-2.0 y MIT.

Recursos

Etiquetas

Administrador de archivos cli Línea de comandos Macos de código abierto Arch Linux Linux Linux Mint Windows Productividad

By admin

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *