¿Existe un find
programa alternativo con una interfaz CLI más convencional? find
funciona y espera parámetros de una manera dolorosamente diferente de la mayoría de las otras utilidades.
Aclaración: estoy buscando un programa que tenga principalmente la misma funcionalidad que encontrar con una interfaz de línea de comandos que funciona y se siente como las recomendaciones de la línea de comandos POSIX (o al menos GNU).
command-line
software-rec
find
utilities
Tamás Szelei
fuente
fuente
ack
y me preguntaba si también hay una mejorfind
.Respuestas:
Este es un error común.
Buscar sigue la sintaxis de opciones. Solo estás confundiendo expresiones primarias con opciones:
La alternativa es localizar. Pero find implementa su propia sintaxis de expresión porque proporciona un conjunto más rico de opciones de filtro y acción. No hay alternativa que pueda hacer lo mismo, simplemente porque sería redundante.
fuente
find
"espera parámetros de una manera dolorosamente diferente de la mayoría de las otras utilidades". Usted declara que OP es "expresiones primarias confusas con opciones". ¿La mayoría de las otras utilidades incluso tienen un concepto de "expresión primaria"? Si no, ¿eso no demuestra el punto de OP? Y esa no es la parte más extraña del usofind
. ¿Qué otra CLI implica{}
(que, por supuesto, se debe escapar de alguna manera)?Depende de la funcionalidad precisa en la
find
que confíe. Si es (principalmente) la funcionalidad de búsqueda, algunos shells son compatibles con globos recursivos. Por ejemplo, conzsh
:Zsh tiene muchas más posibilidades de encontrar resultados a través de calificadores globales (mira cerca del final de
man zshexpn
). Por ejemplo:ls -l **/*(.)
≈find -type f -ls
ls *(m-2u:$USER:)
≈find -mtime -2 -user $USER
Bash 4 también tiene
**/
(debe habilitarlo conshopt -s globstar
), pero nada como los calificadores globales.fuente
Lo echaría un vistazo
locate
. Examinará su base de datos de archivos e imprimirá rápidamente los nombres de las rutas que coinciden con lo que usted proporciona.Como puede ver, es una
odg
coincidencia de subtexto : si la da , entonces coincidirá con d odg e. Pero si lo das.odg
, entonces no lo hará.Sin embargo, hay un inconveniente: necesita una base de datos. Esta base de datos debe actualizarse cuando las cosas cambian. Sin embargo, mi instalación de Fedora 13 tiene esto en un crontab diario.
fuente
locate
¿Qué intentas encontrar? Si normalmente está buscando archivos de código fuente, eche un vistazo
ack
. Básicamente es una herramienta de búsqueda de código fuente, pero el-f
interruptor de ack encontrará archivos que coincidan con un tipo de archivo determinado.Entonces, si desea encontrar todos los archivos Perl en un directorio, por ejemplo, simplemente:
Si no le gustan los tipos de archivo que ack reconoce, puede agregar los suyos propios
~/.ackrc
.ack no es un buscador de archivos de uso general
find
, pero si está trabajando con código fuente, puede ser muy útil.fuente
silversearcher-ag
paquete en las principales distribuciones.Una de las mejores cosas que todo programador debería aprender es: si no puede encontrar una herramienta, ¡cree la suya propia!
Podría escribir una mejor,
-t
para filtrar tipos, etc.Editar : lo anterior es un script Bash. Toma el argumento de la línea de comando y lo pasa a buscar como el valor de la opción -name. Solo un simple ejemplo. Desde que presenté esta respuesta, encontré este script de Python:
https://github.com/sjl/friendly-find/
La interfaz se ve bien, pero no he probado su rendimiento. Podría valer la pena echarle un vistazo.
fuente
$<
no está haciendo nada útil en mi Bash. ¿Qué esperas que haga? ¿Quieres decir en"$@"
realidad? ¿O"$1"
(que es básicamente lo que esto significa en un Makefile)?$<
es elcsh
equivalente deread
- Supongo que quiso decir eso.La forma más estándar de encontrar cosas en unix.
fuente
grep | awk
Es un antipatrón. Ver uso inútil degrep
. Si desea parametrizar el patrón, tal vezdu -a | awk -v "pat=<pattern>" '$0 ~ pat { print $2 }'
awk
, pero una de las grandes ventajas de la filosofía UNIX es que no es necesario comprender todas las características de las herramientas más complejas (comoawk
yfind
) para construir tuberías que puedan realizar las tareas deseadas. tarea.grep | awk
puede no ser óptimo (o, en un sistema multiproceso con un rendimiento altamente optimizadogrep
, ¡tal vez lo sería!), pero es simple .