Listar diretórios que não contêm um arquivo que possui um prefixo variável

3

Estou verificando a saída de um script. Em alguns casos, o script falhou e um determinado arquivo não foi produzido. Eu quero verificar se este arquivo está presente em um diretório e se não, imprima o nome do diretório. Os diretórios parecem:

6680_4#22_SMALT

Todos os números antes de _SMALT são variáveis (eles são um identificador exclusivo) e o arquivo dentro do diretório será parecido com:

6680_4#22.bam 

neste caso, novamente, os números antes de .bam são variáveis (eles corresponderão ao prefixo do diretório, ou seja, o i.d. antes de _SMALT ). Há perguntas semelhantes postadas, mas não estou familiarizado com o script bash. Algumas explicações seriam úteis, e também, meu problema parece complicado pelo fato de que os nomes dos arquivos mudam em seu prefixo. Qualquer ajuda seria muito apreciada.

    
por Conor 14.10.2014 / 11:33

1 resposta

2

Algo como isso funcionaria:

for dir in 'find ./serverfault -maxdepth 1 -type d'
do
  find_output=$( find ${dir} -type f -name "*#*_SMALT" )
  test -z "${find_output}" && echo $dir
done

Esse loop faz o seguinte:

  1. Obtenha uma lista de diretórios no local especificado.
  2. Para cada diretório, execute um comando find para procurar o nome do arquivo desejado.
  3. Verifique se a saída do comando find está vazia. Se é imprimir o nome do diretório.

Para obter os resultados inversos, use test -n para verificar se a saída desse comando find encontrou algo.

Editar : Eu não entendi completamente a pergunta, então reescrevi minha resposta.

    
por 14.10.2014 / 12:04

Tags