Atualização: desde que você especificou que está usando o Linux, a maioria das opções que descrevi originalmente é irrelevante, exceto pelo comando find
:
find . -name "*.exe" \( -size +200k -o -size -120k \)
Para mover todos os arquivos correspondentes para outro diretório, você tem várias opções.
-
Use o argumento
-exec
, que (como o nome sugere) permite que você execute um determinado comando para cada arquivo correspondente. Vejaman find
para mais informações.find . -name "*.exe" \( -size +200k -o -size -120k \) -exec mv {} ./myFolder \;
Aqui,
{}
é substituído pelo nome de cada arquivo conforme é processado. Veja tambémman mv
para informações sobre esse comando. -
Como alternativa, agrupe todo o comando
find
nos backticks e passe-o como o primeiro argumento paramv
:mv 'find . -name "*.exe" \( -size +200k -o -size -120k \)' ./myFolder
-
Você também pode realizar a mesma coisa canalizando a saída do comando
find
paraxargs
:find . -name "*.exe" \( -size +200k -o -size -120k \) | xargs -i mv {} ./myFolder
Mais uma vez, {}
é substituído pelo nome do arquivo atual. Veja man xargs
para mais informações.
Finalmente, para executar MyExec.exe
(suponho que você esteja usando o Wine para isso):
wine ./myFolder/MyExec.exe
Vou preservar minha resposta original abaixo, caso alguém precise fazer algo semelhante no Windows.
Existem várias opções, dependendo de como você deseja executar sua pesquisa.
-
Como você mencionou os arquivos .exe, presumo que esteja no Windows. A primeira opção seria usar a caixa de pesquisa no Windows Explorer. Basta navegar até a pasta onde deseja iniciar sua pesquisa, tecle F3 e digite a seguinte consulta de pesquisa:
*.exe (Size:<120kB OR Size:>200kB)
Para obter mais informações, consulte Dicas avançadas para pesquisar no Windows .
Para mover os arquivos, basta selecioná-los e arrastar e soltar (ou cortá-los e colá-los) na pasta de destino.
-
Se você quiser fazer isso a partir da linha de comando (por exemplo, se o processo precisar ser automatizado):
forfiles /m *.exe /s /c "cmd /c if @fsize GTR 204800 (echo @path) else if @fsize LSS 122880 (echo @path)"
Para obter mais informações, consulte a documentação do
forfiles
eif
comandos.Para mover os arquivos, substitua
echo @path
pormove @path C:\destination\folder
. -
Alternativamente, o Powershell fornece uma sintaxe mais clara:
Get-ChildItem -Recurse | Where-Object { $_.Extension -eq ".exe" -and ( $_.Length -gt 204800 -or $_.Length -lt 122880 ) }
Para obter mais informações, consulte a documentação no Get-ChildItem e Oc -Objecto cmdlets. Observe que os tamanhos dos arquivos são em bytes (204800 B = 200 kB e 122880 B = 120 kB).
Para mover os arquivos, canalize a saída dos itens acima para o cmdlet Move-Item .
-
Finalmente, se você tiver o Cygwin ou algum outro shell compatível com Unix disponível (o que eu presumo que você faça, a partir da tag "bash"), você também pode usar o comando
find
:find . -name "*.exe" \( -size +200k -o -size -120k \)
Para mais informações, consulte
man find
.Para mover os arquivos, use o argumento
-exec
.
Quanto à segunda parte da sua pergunta, talvez você possa elaborar o que está tentando alcançar com a execução de "executável.exe" e como ela se relaciona com a descoberta e a movimentação de outros arquivos .exe.