Como iterar sobre uma lista de arquivos e executar uma ação neles

1

Eu quero escrever um script (ou, de preferência, um alias) que faça o seguinte:

  1. Encontre todos os arquivos correspondentes a um padrão *.jar
  2. Iterar todos esses arquivos e executar jar tvf <jar file name> | grep <Some argument>
  3. Imprimir se um jar contiver um arquivo com um nome que corresponda ao argument

Estou trabalhando em tcsh e preferiria não abrir um novo shell, pois quero isso como um alias e não como um script - isso é factível?

    
por RonK 12.05.2011 / 12:34

2 respostas

3

Um alias simples não funcionará para este aplicativo. Algo como isso chegaria perto, exceto o que você obteria é a saída do grep, não o nome do arquivo jar:

alias targrep="find . -name '*.jar' -exec jar tvf {} \; | grep"

targrep someterm

Para obter o nome do arquivo, você deve alternar para usar uma função em vez de um alias para ter mais controle sobre argumentos e para onde os valores vão. (Nota: formato bash, você pode precisar modificar para tcsh)

function jargrep () {
    find . -name '*.jar' | while read jar; do
        jar tvf $jar | grep -q  $@ && echo $jar
    done
}

jargrep someterm
    
por 12.05.2011 / 13:23
-1

Tente algo nos moldes de

find . -name '*.jar' -exec 'jar tvf | grep <some agrument>'

leia a página do manual para encontrar mais detalhes.

    
por 12.05.2011 / 13:02