¿Existe un findprograma alternativo con una interfaz CLI más convencional? findfunciona 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

acky 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
findque 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 -lsls *(m-2u:$USER:)≈find -mtime -2 -user $USERBash 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
odgcoincidencia 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-finterruptor 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-agpaquete 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,
-tpara 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 elcshequivalente deread- Supongo que quiso decir eso.La forma más estándar de encontrar cosas en unix.
fuente
grep | awkEs 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 (comoawkyfind) para construir tuberías que puedan realizar las tareas deseadas. tarea.grep | awkpuede no ser óptimo (o, en un sistema multiproceso con un rendimiento altamente optimizadogrep, ¡tal vez lo sería!), pero es simple .