Salta vários arquivos e gera uma coluna adicional com resultados de 'find'

1

Gostaria de extrair a última linha de texto de um arquivo (múltiplo) específico em um diretório. Além disso, gostaria que os resultados estivessem em um formato de coluna mais tradicional (como ls ) com caminho, em vez do formato típico de tail .

Dos seguintes resultados {1}, gostaria de acrescentar como coluna adicional a última linha de dados {2}

Onde {1} = find . -iname 'updated.txt' e       {2} = tail -n1

Estou usando bash no Mavericks

    
por Kris 30.12.2013 / 00:04

2 respostas

1

Aqui você vai:

find . -iname 'updated.txt' -exec ls -l {} \; -exec tail -n1 {} \;

Uma alternativa mais simples, mas com menos controle sobre a formatação de ls :

find . -iname 'updated.txt' -ls -exec tail -n1 {} \;

UPDATE

Como você disse nos comentários, você prefere ter o ls output e o tail lado a lado para cada arquivo.

Você poderia executar um subshell para cada correspondência com echo da saída dos dois comandos lado a lado:

find . -iname 'updated.txt' -exec sh -c 'echo $(ls -l "{}") $(tail -n1 "{}")' \;

Da mesma forma, você pode usar paste :

find . -iname 'updated.txt' -exec bash -c 'paste <(ls -l "{}") <(tail -n1 "{}")' \;

Ou você pode executar os dois comandos find em paralelo e colar sua saída lado a lado assim:

paste \
  <(find . -iname 'updated.txt' -exec ls -l {} \;) \
  <(find . -iname 'updated.txt' -exec tail -n1 {} \;)
    
por 30.12.2013 / 00:15
1
$ find . -iname 'updated.txt' -printf '%M %u %g %s %Tc %p\t' -exec tail -n1 {} \;

A saída será como:

-rw-r--r-- user group 4853 2013-12-22T00:58:32 MSK ./path/updated.txt    Last line of the updated.txt.
    
por 30.12.2013 / 17:43

Tags