Hay un comando de bash que puede ser utilizado como centro de atención o una opción con ls
que sólo imprime los archivos que contienen el texto? Quiero ser capaz de abrir el Terminal y escribir algo ls -SOMEOPTION filename
y encontrar todos los archivos que tienen filename
en su nombre, y que esta opción podría ser usado con -R
y funcionaría como un reemplazo para el centro de atención.
Respuestas
¿Demasiados anuncios? find . -type f -name "*filename*" -exec grep -il 'mywordinthefile' {} \;
find
búsqueda de archivo de forma recursiva en un directorio.Primeros parámetros es el directorio en el que desea buscar. Aquí es
.
por lo que el directorio actual. Usted podría utilizar~/Documents
, por ejemplo, o cualquier otro directorio.-type f-
opción es sólo para devolver los archivos, no de los directorios.-name
opción tiene un patrón para encontrar detalles de los nombres de archivo.grep
se utiliza aquí para encontrar la palabra que se desee en los archivos encontrados porfind
.
Para encontrar todos los archivos que contengan una determinada cadena, puede utilizar grep en su propio:
grep -R /path/to/directory "myword"
En el ejemplo anterior, "myword"
es lo que buscas, y /path/to/directory
es el directorio en el que desea realizar la búsqueda. -R
dice grep
a ejecutar una búsqueda recursiva (es decir, para que se inicie en la ruta especificada, y van en cada subdirectorio en el que hay).
EDITAR
He re-leído tu pregunta y creo que usted está buscando cómo encontrar los archivos que tienen un determinado nombre de archivo. Para este uso:
find /path/to/directory -name "*glob*" -print
donde /path/to/directory
es donde usted desea iniciar su búsqueda (y find
se busque también en los subdirectorios) y "*glob*"
es una completa o parcial de nombre de archivo que desea buscar. Por favor, tenga en cuenta que usted puede utilizar caracteres comodín (.
y *
para cualquier y cualquier múltiples personajes coinciden, respectivamente) en el globo. Como una variación a esto, se puede utilizar, como se propone por los demás:
find /path/to/directory -name "*glob*" -exec ls -la {} \;
en el anterior, lo que pone después de que la opción -exec
es cualquier comando de UNIX con paramteres (en este caso, ls -la
). El {}
será sustituido por el nombre de archivo find
encuentra, y el \;
es una cadena de terminación.
EDIT 2
Tenga en cuenta, los comandos anteriores dará resultados similares a los del centro de atención, pero ellos no utilizan centro de atención en todo.
Si desea utilizar Spotlight desde la línea de comandos, puede utilizar mdfind
comando, que es una interfaz de línea de comandos para el centro de atención. Escribir mdfind
sobre su propio te dará una ayuda rápida para usar con un par de ejemplos. man mdfind
le dará un manual más detallado.
Esencialmente mdfind
toma una cadena de búsqueda (y modificadores opcionales) como argumento y es el mismo que el tipo es el centro de atención del campo de texto cuando se utiliza en una interfaz gráfica de usuario.
Para buscar archivos con una cadena específica en el nombre de archivo, uso
find . -type f -name '*<filename>*' 2> /dev/null
Sustituto <filename>
con la cadena que desea buscar en el nombre de archivo.
La redirección al final es para evitar errores de impresión cuando ciertos archivos o carpetas no son accesibles.
Usted puede poner este comando en un script de shell, llamados decir, lsf que podría contener lo siguiente:
find . -type f -name "*$1*" 2> /dev/null
Después de hacerla ejecutable utilizando
chmod +x lsf
Usted puede también poner esto en su ~/.bashrc
o ~/.bash_profile
archivo en lugar de una secuencia de comandos de shell como se describió anteriormente (el comando es todavía llamado lsf aquí):
myls()
{
find . -type f -name "*$1*" 2> /dev/null
}
alias lsf=myls