¿Cómo puedo `buscar` los archivos que coincidan con el patrón dentro de un directorio que coincidan con otro patrón de la línea de comandos?

Decir que me quiere encontrar todos los archivos en /Path nombre file_name*. Fácil:

$ find /Path -name "file_name*"
/Path/foo1/file_name1.txt
/Path/foo2/file_name2.txt
/Path/bar3/file_name3.txt
/Path/bar4/file_name4.txt

¿Qué hago si sólo desea buscar subdirectorios como bar?

Podía canalizar los resultados, pero esto es altamente ineficiente.

$ find /Path -name "file_name*" | grep "bar"
/Path/bar3/file_name3.txt
/Path/bar4/file_name4.txt

Hay una manera de llegar a todos ellos en la find y a saltarse la búsqueda de directorios de la no coincidencia de bar?

Nota: Si puedo buscar /Path/bar3 específicamente los resultados al instante. Pero si me busca /Path y, a continuación, grep para bar se tarda de 30 a 60 segundos. Esta es la razón por la tubería para grep no es aceptable.

InformationsquelleAutor Ryan | 2015-10-20

2 Kommentare

  1. 7

    Utilizar un carácter comodín en el -name parámetro, pero también se puede utilizar en el parámetro path.

    find /Path/bar* -name "file_name*"
    

    He creado el siguiente directorio de prueba:

    ./Path
    |-- bar
        `-- file_name123.txt
    |-- bar1
        `-- file_name234.txt
    |-- bar2
        `-- file_name345.txt
    |-- foo
        `-- file_name456.txt
    

    El comando anterior nos da:

    Path/bar/file_name123.txt
    Path/bar1/file_name234.txt
    Path/bar2/file_name345.txt
    
  2. 2

    Puede utilizar el -path bandera como

    find /Path -path "/Path/bar*" -name "file_name*"
    

    Esto le permite hacer varias rutas donde no hay fácil comodín como

    find /PATH \( -path "/Path/bar*" -o -path "/Path/foo* \) -name "file_name*"
    

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea