Listar diretórios que não contêm um arquivo

5

Eu já vi perguntas semelhantes a isso, mas nada que eu possa encontrar está relacionado diretamente aos arquivos.

Existe alguma maneira de me fornecer uma lista de diretórios que não contenham um arquivo específico?

Exemplo:

/dir1/good
/dir1/stuff
/dir2/junk
/dir2/morejunk
/dir3/good
/dir4/junk

Eu gostaria de executar um comando find onde eu retornaria apenas os nomes de diretório que não continham o arquivo 'good' (dir2 e dir4). Existe alguma maneira de encontrar ou algum combo para fazer isso? A única maneira de fazer isso agora é executar um find para o arquivo 'good', salvar essa saída e usar alguns comandos awk, sort e comm -3 para obter um diff do que eu preciso.

Existe alguma maneira mais fácil de fazer isso?

    
por Stefhen 13.02.2011 / 19:03

2 respostas

6

Você pode usar -exec test ... para verificar a existência do arquivo como bom em um diretório, por exemplo,

find /path/to/search -type d \! -exec test -e '{}/good' \; -print
    
por 13.02.2011 / 19:30
1

Você pode fazer isso facilmente com o find e o paralelo GNU :

$ file=foo && find . -type d | parallel -j+0 "[ -f {}/$file ] || echo $file not in {}"

Esse comando funciona alimentando todos os diretórios sob o diretório atual em paralelo. Em paralelo, lança trabalhos paralelos para verificar o arquivo foo em cada diretório e imprime uma mensagem se o arquivo não existir no diretório.

    
por 13.02.2011 / 19:22

Tags