2009-03-18 4 views
30

en Editores/idus como Eclipse y textmate, hay atajos para encontrar rápidamente un archivo en particular en un directorio del proyecto.encontrar el archivo en el directorio desde la línea de comandos

¿Existe una herramienta similar para hacer finalización ruta completa de nombres de archivo dentro de un directorio (recursivamente), en bash u otra concha?

que tienen proyectos con una gran cantidad de directorios, y los profundos en ese (suspiro, java). pestaña Golpear en la cáscara sólo ciclos thru archivos en el directorio inmediata, eso no es suficiente se admite =/

+0

Posible duplicado de [¿Cómo puedo encontrar todos los archivos que contienen texto específico en Linux?] (Https://stackoverflow.com/questions/16956810/how-do-i-find-all-files-containing-specific-text -on-linux) – Bruno

Respuesta

53
find /root/directory/to/search -name 'filename.*' 
# Directory is optional (defaults to cwd) 

estándar UNIX englobamiento. Ver man find para más información.

Si está utilizando Vim, puede utilizar:

:e **/filename.cpp 

O :tabn o cualquier comando de Vim que acepta un nombre de archivo.

+0

@Bryan Oakley, gracias por la edición, pero sobrescribió mi adición sobre Vim. Reformé el argumento del directorio en mi respuesta. Gracias. – strager

+0

Gracias por la sugerencia de vim. Esa es una utilidad que aún no sabía: P – skinp

+1

¿Hay alguna forma de hacerlo en el directorio actual sin tipear todo el camino? –

0

Sí, bash tiene mecanismos de nombres de archivos. Yo no los utilizo yo mismo (demasiado perezoso para aprender, y no lo considero necesario con la suficiente frecuencia para hacerlo urgente), pero el mecanismo básico es escribir los primeros caracteres y luego una pestaña; esto extenderá el nombre tanto como sea posible (tal vez nada) siempre que el nombre no sea ambiguo. Hay una gran cantidad de comandos al estilo de Emacs relacionados con la finalización en la página de buen manual.

2

Cuando estaba en el mundo UNIX (usando tcsh (suspiro ...)), que solía tener todo tipo de configuración de "encontrar" alias/scripts para la búsqueda de archivos. Creo que el defecto "encontrar" sintaxis es un poco torpe, así que solía tener alias/scripts en el tubo en grep, lo que le permite utilizar expresiones regulares para la búsqueda de "encontrar -print.":

# finds all .java files starting in current directory 
find . -print | grep '\.java' 

#finds all .java files whose name contains "Message" 
find . -print | grep '.*Message.*\.java' 

De Por supuesto, los ejemplos anteriores se pueden hacer con el hallazgo simple, pero si tiene una búsqueda más específica, grep puede ayudar bastante. Esto funciona bastante bien, a menos que "find.print" tenga demasiados directorios para recurrir a través ... entonces se vuelve bastante lento. (Por ejemplo, no querría hacer esto comenzando en la raíz "/")

7

Si está buscando hacer algo con una lista de archivos, puede usar find combinado con el constructor bash $() (mejor que backticks ya que está permitido anidar).

por ejemplo, digamos que está en el nivel superior del directorio de su proyecto y desea una lista de todos los archivos C que comiencen con "btree". El comando:

find . -type f -name 'btree*.c' 

devolverá una lista de ellos. Pero esto realmente no ayuda a hacer algo con ellos.

Por lo tanto, supongamos que desea buscar todos los archivos para la cadena "ERROR" o edítelos todos. Puede ejecutar uno de los siguientes:

grep ERROR $(find . -type f -name 'btree*.c') 
vi $(find . -type f -name 'btree*.c') 

para hacer esto.

1

Yo uso este script para encontrar rápidamente archivos a través de directorios en un proyecto.Descubrí que funciona muy bien y aprovecha la función autocompletar de Vim abriendo y cerrando un nuevo buffer para la búsqueda. También completa inteligentemente tanto como sea posible para usted, por lo que generalmente puede escribir un carácter o dos y abrir el archivo en cualquier directorio de su proyecto. Empecé a usarlo específicamente debido a un proyecto de Java y me ha ahorrado mucho tiempo. Usted acaba de construir la memoria caché una vez cuando comience su sesión de edición escribiendo: FC (nombres de directorio). También puedes usar. para obtener el directorio actual y todos los subdirectorios. Después de eso, simplemente escriba: FF (o FS para abrir una nueva división) y se abrirá un nuevo búfer para seleccionar el archivo que desea. Después de seleccionar el archivo, se cierra el buffer temporal y usted se encuentra dentro del archivo solicitado y puede comenzar a editar. Además, here es otro enlace en Stack Overflow que puede ayudar.

0

locate <file_pattern>

*** find sin duda trabajar, y pueden apuntar a directorios específicos. Sin embargo, este comando es más lento que el comando locate. En un sistema operativo Linux, cada mañana se construye una base de datos que contiene una lista de todos los directorios y archivos, y el comando locate busca de manera eficiente esta base de datos, por lo que si desea buscar archivos que no se crearon hoy, sería la manera más rápida de lograr tal tarea.

Cuestiones relacionadas