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 find
Gracias 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 defind -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
.gitignore
por 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.
búsqueda sencilla
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
.
Búsqueda de expresiones regulares
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.zip
esto 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.py
esto 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
opción para ejecutar
etailsls
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
/--exec
puede 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 fd
El 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 rm
s 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 rm
s --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 foo
puedes 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