Como encontrar diretório contendo arquivos ou diretórios específicos?

1

Estou procurando um comando de uma linha que encontre vários arquivos ou diretórios contidos em um único diretório.

foo -> bar
    -> baz
    -> quux

temp -> bar

Estou procurando encontrar somente foo porque contém bar , baz e quux , mas não encontra temp .

Devido a outros motivos, tenho que usar tcsh para isso.

Alguma sugestão?

    
por StephenG 25.11.2015 / 19:10

4 respostas

2

Isso deve fazer o que você quer e funciona com os dados fornecidos

find . -type d -exec test -e '{}'/bar -a -e '{}'/baz -a -e '{}'/quux \;  -print

Basicamente, ele encontra diretórios e verifica se eles contêm os arquivos relevantes. Se eles fizerem isso, imprime o nome. Trabalha no bash e no tcsh.

    
por 26.11.2015 / 00:23
0

Uma maneira de fazer isso, especialmente se você precisar descobrir essas informações várias vezes, é com mlocate . Depois de instalar o mlocate , você precisará executar sudo updatedb para preencher o banco de dados de índice. A reindexação futura é acionada pela tarefa cron diária (que é configurada por padrão em muitas distribuições populares do Linux).

Quando você tem um índice atualizado, pode executar consultas como:

locate -r '^/.*/foo/\(bar\|baz\|quux\)$'

O comando acima irá procurar por tudo, desde a raiz ( / ) e imprimir algo como:

/home/foo/bar
/home/foo/baz
/var/lib/foo/quux
/usr/local/foo/bar
    
por 25.11.2015 / 19:55
0

Existem várias maneiras de localizar seus arquivos. Um exemplo: encontrar um diretório chamado "foo" e listar tudo dentro dele:

find . -name "foo" -type d | xargs ls -la

Outra opção, se você tiver o comando tree instalado ( sudo apt-get install -y tree ):

find . -name "foo" -type d | xargs tree -afi 

O -afi fornecerá todos os arquivos ( -a ), o caminho completo do arquivo ( -f ) e descartará o recuo ( -i ).

    
por 25.11.2015 / 20:03
0

Tente encontrar todos os diretórios e veja se eles contêm seus três arquivos / dirs:

find -type d -print0 | xargs -0 -I@@ sh -c '[ -e @@/a ] && [ -e @@/b ] && [ -e @@/c ] && echo @@'
    
por 25.11.2015 / 23:43

Tags