Encontrar diretórios que não contenham um determinado subdiretório

1

Eu sei que posso fazer isso para obter uma lista de diretórios dentro de / vz / root:

find /vz/root/ -type d -maxdepth 1 -exec echo {} \;

Mas como posso editar isso para listar apenas os diretórios que não contêm um subdiretório chamado "php-5.3.3"? Portanto, se houver três diretórios / vz / root / 101, / vz / root / 102 e / vz / root / 103, e dois deles contiverem o subdiretório php-5.3.3, ele apenas ecoará o caminho daquele que não não tem isso.

    
por Tim 02.11.2010 / 10:04

5 respostas

5

Tente

find /vz/root/ -maxdepth 1 -type d  \! -exec test -d '{}/php-5.3.3' \; -print | grep -v php-5.3.3 | uniq -w 12 | grep -v '^/vz/root/$'
    
por 02.11.2010 / 11:39
2

Se você quiser excluir os caminhos que contêm o php-5.3.3, você pode simplesmente usar grep -v

find /root/ -maxdepth 1 -type d -exec echo {} \; | grep -v php-5.3.3
    
por 02.11.2010 / 10:30
1

Você pode usar o ! como operador não .

find /vz/root/ -type d -maxdepth 1 ! -ipath '*php-5.3.3*' -exec echo {} \;

Isso listaria todos os diretórios sob / vz / root / exceto aqueles que possuem o php-5.3.3 em seu nome de caminho.

    
por 02.11.2010 / 10:45
0

É possível pegar algo que quase resolva com o find e use find2perl para criar um programa em Perl que faça a mesma coisa. Em seguida, modifique o script Perl para fazer algo avançado. Eu não vou enumerar porque você pediu uma variação no comando find e isso está fora do escopo da sua solicitação. Além disso, você teria que conhecer algum Perl e eu não quero começar um flamewar.

    
por 03.11.2010 / 03:15
0

Versão simplificada da resposta aceita:

find /vz/root/ -type d -maxdepth 1 -exec test ! -d "{}/php-5.3.3" \; -print
    
por 13.07.2017 / 22:58

Tags