Após uma pequena pesquisa, descobri este comando:
> find . -type f \( -name "*.exe" \) | egrep -v
> 'games_1|rei|games|tor|jogos|mods|text' > 1
O que eu queria fazer era encontrar arquivos com extensão .exe, exceto em caminhos que contivessem qualquer uma dessas strings e depois imprimir os resultados em um arquivo chamado "1", que escrevi em um arquivo executável.
Porém, ao executá-lo no terminal, ocorreram os seguintes erros e nada foi feito:
find: ‘./NUNO-PC/Disco_2TB_120323/Downloads_070321/My Web Sites/wdsdeewre/2.bp.blogspot.com’: Input/output error
find: ‘./NUNO-PC/Disco_2TB_120323/Downloads_070321/My Web Sites/wdsdeewre/segredoh.blogspot.com/feeds’: Input/output error
find: ‘./NUNO-PC/Disco_2TB_120323/Downloads_070321/My Web Sites/wdsdeewre/4.bp.blogspot.com’: Input/output error
find: ‘./NUNO-PC/Disco_2TB_120323/Downloads_070321/My Web Sites/wdsdeewre/3.bp.blogspot.com/-ux8HFQj0iuE/WQ9ywGiPXOI’: Input/output error
grep: write error: Input/output error
./encontrarsoft: error reading input file: Invalid argument
o que estou perdendo?
Os erros que você mostra realmente não fazem sentido, pois parece que o grep está tentando ler um arquivo, mas seu comando não causaria isso. De qualquer forma, esses erros são sobre arquivos/setores problemáticos do seu disco e não sobre o seu comando, e você não precisa
grep
de qualquer maneira para que possamos evitá-los. A propósito, não useegrep
porque é obsoleto, usegrep -E
em vez disso.Veja como fazer o que quiser com um único
find
comando:Isso procurará arquivos cujo nome termine com
.exe
e cujo caminho completo, incluindo o nome, não corresponda a nenhuma das strings mencionadas. A linguagem de expressão regular padrão para find são as expressões regulares do Emacs e, nessas, você precisa escapar de ambas( )
e|
para que tenham seus significados especiais de agrupamento e OR respectivamente. Alternativamente, você pode definirfind
oegrep
estilo de expressões regulares e simplificar para:(Observe que
\
há apenas uma quebra de linha para evitar a rolagem horizontal; os comandos podem ser copiados/colados diretamente em um terminal como estão, mas você também pode fazer tudo em uma única linha.)