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
dfile.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.