É muito comum descobrir em qual arquivo esta uma determinada palavra ou frase. Eu frequentemente utilizo para fazer buscas em logs.
$for i in `ls -l | grep 'Mar 24' | grep Dispatcher | awk -F" " '{ print $9 }'`; do grep "1778621024" $i; done > /tmp/resultado.txt
onde:
é realizado um for com o resultado do ‘ls -l’, filtra-os pela data (24/mar), filtra novamente pelo nome ‘Dispacther’, sobre o que restou exibe apenas a nona coluna separada por vírgula, busca em cada arquivo ‘$1′ pelo valor ’1778621024′ e grava o resultado no arquivo texto /tmp/resultado.txt
Vamos entender isso melhor:
ls -l | grep ‘Mar 24′ -> A partir do resultado do ls, mostra apenas os arquivos de 24/Mar
ls -l | grep ‘Mar 24′ | grep Dispatcher -> A partir do resultado do ls, mostra apenas os arquivos de 24/mar e apenas os que tem Dispatcher no nome.
ls -l | grep ‘Mar 24′ | grep Dispatcher | awk -F” ” ‘{ print $9 }‘ -> A partir do resultado do ls, mostra apenas os arquivos de 24/mar e mostra apenas os que tem Dispatcher e trará como resultado somente a nona coluna do ‘ls -l’ as colunas são separadas por ” “.
É possível também utilizar o comando find para uma busca mais aperfeiçoada, para isso é necessário utilizar:
find . -name *.pdf -exec ls -l {} \;
isso substitui o ‘ls -l’ do for. Outra forma é:
find . -name *.pdf -ls
Como opção coloque ‘-l’ no último grep para mostrar o nome do arquivo ao invés do conteúdo.