Como usar o comando find de forma que corresponda ao diretório mais interno?

1

Digamos que eu tenha o seguinte arquivo

this/is/my/file.txt

Posso pesquisar este arquivo, pois só sei que o arquivo está no diretório /my/ ?

    
por user445670 22.09.2015 / 22:42

1 resposta

1

Como faço para find um arquivo no diretório mais interno?

Você pode usar find para procurar um arquivo específico ( file.txt ) e ele irá recorrer a você (de acordo com as opções especificadas). Mas e se você tiver dois file.txt s e quiser apenas corresponder a um , digamos, para uso em um script? Insira awk , sort , head e cut :

find /my/ -type f -name file.txt | awk -F/ '{ print NF-1, $0 }' | sort -nr | head -n1 | cut -d " " -f2

Isso retornará um resultado - a correspondência mais profunda - ou nenhum.

Explicação

  • find em /my/ todos os arquivos comuns ( -type f ) -name d file.txt

  • passe para awk e consiga contar o número de diretórios (profundidade) definindo o separador de campo como / ( -F/ ) e prefixando-o ao resultado ( print NF-1, $0 )

  • sort que numericamente, descendente do maior (ou seja, a maioria dos diretórios) primeiro

  • obtenha apenas um resultado ( head -n1 )

  • retira a contagem de profundidade ( cut -d " " -f2 )

Pode haver uma maneira mais curta de fazê-lo, mas isso retornará o resultado mais profundo. Ele assume barras / para demarcação de diretório, mas acho que podemos permitir isso. Testado em GNU bash, version 4.3.30(1)-release (e GNU bash, version 3.2.53(1)-release no OSX) e não depende muito dos GNUisms.

    
por 22.09.2015 / 23:01

Tags