Existe uma maneira simples de encontrar recursivamente todos os arquivos em uma hierarquia de diretórios que não terminam em uma lista de extensões? Por exemplo, todos os arquivos que não são * .dll ou * .exe
A localização do UNIX / GNU, por mais poderosa que pareça, não parece ter um exclude
modo (ou estou sentindo falta dele), e sempre achei difícil usar expressões regulares para encontrar coisas que não correspondem a uma expressão específica .
Estou em um ambiente Windows (usando a porta GnuWin32 da maioria das ferramentas GNU), então estou igualmente aberto para soluções somente para Windows.
command-line
find
Cristian Diaconescu
fonte
fonte
-not
pode ser substituído por'!'
(é recomendável citar). Por outro lado,-name
é sensível a-iname
maiúsculas e minúsculas.fonte
-not
é uma má opção, desta vez com!
obras nice :)As primeiras opções com dois nomes não têm opção de impressão, portanto, foram ignoradas. Todo o resto é impresso.
fonte
Você pode fazer algo usando o comando grep:
A
-v
bandeira nogrep
significa especificamente "encontrar coisas que não correspondem a essa expressão".fonte
mais um :-)
Referência do comando find do Unix
fonte
fonte
Linux / OS X:
A partir do diretório atual, localize recursivamente todos os arquivos que terminam em .dll ou .exe
A partir do diretório atual, encontre recursivamente todos os arquivos que NÃO terminam em .dll ou .exe
Notas:
(1) A opção P no grep indica que estamos usando o estilo Perl para escrever nossas expressões regulares a serem usadas em conjunto com o comando grep . Com o objetivo de executar o comando grep em conjunto com expressões regulares, acho que o estilo Perl é o estilo mais poderoso existente.
(2) A opção v no grep instrui o shell a excluir qualquer arquivo que satisfaça a expressão regular
(3) O caractere $ no final de dizer ".dll $" é um caractere de controle delimitador que informa ao shell que a string do nome do arquivo termina com ".dll"
fonte
Outras soluções nesta página não são desejáveis se você tiver uma longa lista de extensões - a manutenção de uma longa sequência
-not -name 'this' -not -name 'that' -not -name 'other'
seria tediosa e propensa a erros - ou se a pesquisa for programática e a lista de extensões for criada em tempo de execução.Para essas situações, uma solução que separa mais claramente dados (a lista de extensões) e código (os parâmetros para
find
) pode ser desejável. Dada uma estrutura de diretório e arquivo que se parece com isso:Você pode fazer algo assim:
O que resulta em:
Você pode alterar a lista de extensões sem alterar o bloco de código.
NOTA não funciona com OSX nativo
find
- use o gnu find.fonte