¿Buscando Mac a través del terminal?

22

¿hay algún comando para buscar en tu Mac usando la terminal? Intenté usin grep para buscar, pero parece que no responde y no surge nada.

Por ejemplo, escribiría "grep Files" (un nombre de carpeta) y simplemente imprime una línea en blanco y no sucede nada.

JFW
fuente
Estoy interesado en buscar a través de todo tipo de archivos; No necesariamente excluye archivos de texto, pero no solo archivos de texto.
JFW

Respuestas:

21

También puede usar el mdfindcomando para realizar una búsqueda con Spotlight. Más información aquí .

Úselo mdfind -name searchtermpara recuperar archivos con el nombre searchterm. Utilícelo mdfind searchtermpara realizar una búsqueda en el nombre y el contenido del archivo.

reg
fuente
25

Si solo desea buscar archivos con un nombre determinado, use find

La página del manual se puede encontrar AQUÍ o escribiendo man finden el indicador del terminal.

Básicamente, find buscará de forma recursiva un archivo que cumpla con los criterios que especifique. El ejemplo más fácil:

find . -name file_name -print

Eso buscará un archivo llamado "nombre_archivo" comenzando en el directorio actual y buscando debajo e imprimirá los archivos con ese nombre.

find ~ -name ".DS_Store" -delete

Eso encontrará todos los archivos .DS_Store y los eliminará.

Puede buscar por nombre, expresiones regulares, fecha. Puede actuar sobre el archivo de cualquier manera Unix con el -execpredicado.

También puede usar find como el inicio de una canalización de acciones más compleja. Ejemplo:

find . -type f -print | egrep -i '\.m4a$|\.mp3$'

Encontrará todos los archivos con extensiones .m4a o .mp3

find . -type f -print | egrep -i '\.m4a$|\.mp3$' | wc -l

Le dará un recuento de esos archivos.

Drawk
fuente
Si -printes el único predicado, puede omitirse; Además, hay un simple globbing disponible. Por lo tanto la búsqueda de todos los .txtarchivos bajo un directorio foose llevaría a cabo confind foo -name \\*.txt
Norman gris
@yoshi: Eso es absolutamente falso. Escribir find .es recursivo desde el cwd. ¡Intenta escribir find .en tu directorio raíz!
drewk
Mi mal podría jurar que no era recursivo, pero tal vez el servidor ha acuñado -shrug-
nuala
5

Si desea buscar en una carpeta completa, simplemente use -r en grep:

grep -r pattern folder/to/search

Con find, también puedes usar xargs:

find folder/to/search -name '*.txt' | xargs grep pattern

o para asegurarse de buscar dos archivos a la vez y, por lo tanto, tener los nombres de archivo especificados:

find folder/to/search -name '*.txt' | xargs grep -n2 pattern
Eric Darchis
fuente
2

grepespera tanto un patrón como una especificación de archivo. Si falta uno, usa lo que se pasa como patrón y espera a que los datos busquen a través de la entrada estándar.

Si desea utilizar una especificación de archivo más compleja, utilice find.

find ~ -name '*.txt' -exec grep -q 'secret' {} \; -print
Ignacio Vazquez-Abrams
fuente
Básicamente, solo quiero que encuentre archivos que tengan el nombre que ingresé en el comando.
JFW
En ese caso, no necesita usar el -execpredicado en find.
Ignacio Vazquez-Abrams