Grep no arquivo mais recente

2

Estou tentando encontrar uma linha específica do arquivo mais recente que eu tenho em subpastas. Os arquivos têm o mesmo nome. Então a estrutura é como:

  • pasta
    • SubFolder1
      • filename.xml
    • SubFolder2
      • filename.xml

Estou usando o grep para ter a linha

grep -r "mySubString" folder/

Eu tentei usar o find para classificar arquivos como proposto aqui . Mas eu não sei como combinar os dois para obter apenas a linha do arquivo mais recente.

Obrigado pela sua ajuda.

    
por Mario Levrero 07.10.2014 / 11:28

2 respostas

1
find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "

Isso retornará o arquivo mais recente criado a partir do diretório em que você está executando este comando e de todos os subdiretórios. Se você quiser, pesquise em um diretório específico chane . no caminho do diretório.

para o grep para o conteúdo deste arquivo:

cat 'find . -type f -printf '%T@ %p\n' | sort -n | tail -1 | cut -f2- -d" "' | grep "mySubString"

Edit: não tenho certeza. Eu tentei isso comigo rapidamente e funcionou. Eu criei um arquivo de teste e usei este comando. Isso funcionou para mim. Se houver algum problema, por favor me avise.

    
por 07.10.2014 / 11:46
1

zsh:

grep pattern **/*(.om[1])

om de pedidos por data de modificação e . é um qualificador para arquivos regulares.

GNU find :

grep pattern "$(find -type f -printf '%T@ %p\n'|sort -n|tail -n1|cut -d' ' -f2-)"

%T@ é hora da modificação e %p é nome do caminho.

BSD:

grep pattern "$(find . -type f -exec stat -f '%m %N' {} +|sort -n|tail -n1|cut -d' ' -f2-)"

%m é hora da modificação e %N é nome do caminho.

bash 4:

shopt -s globstar;grep pattern "$(ls -dt **|head -n1)"

Isso inclui diretórios e pode resultar em um erro muito longo na lista de argumentos.

    
por 07.10.2014 / 12:12