Procura por arquivo exe dentro de uma condição

0

Eu quero pesquisar todos os arquivos .exe maiores que 200 kB ou menores que 120 kB na pasta atual e em suas subpastas. Então eu quero movê-los para outra pasta chamada "pasta" e executar nesta pasta o arquivo chamado "executável.exe" infinitamente e mostrar algumas informações sobre o consumo de memória.

Alguma idéia?

Estou usando o Linux Mint. Eu usei o comando find para procurar por arquivos ".exe", por resposta do Indrek .

find . -name "*.exe" \( -size +200k -o -size -120k \)

Agora o que eu quero fazer é mover os arquivos para outra pasta chamada "myFolder", e depois disso eu tenho que executar qualquer arquivo nesta pasta chamada "MyExec.exe"

    
por wassim-azirar 28.05.2012 / 23:33

2 respostas

5

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.

  1. Use o argumento -exec , que (como o nome sugere) permite que você execute um determinado comando para cada arquivo correspondente. Veja man 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ém man mv para informações sobre esse comando.

  2. Como alternativa, agrupe todo o comando find nos backticks e passe-o como o primeiro argumento para mv :

    mv 'find . -name "*.exe" \( -size +200k -o -size -120k \)' ./myFolder
  3. Você também pode realizar a mesma coisa canalizando a saída do comando find para xargs :

    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.

  1. 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.

  2. 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 e if comandos.

    Para mover os arquivos, substitua echo @path por move @path C:\destination\folder .

  3. 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 .

  4. 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.

    
por 29.05.2012 / 00:22
2

O código Bash abaixo deve mover os arquivos. Eu não sei o que você quer dizer com " executar nesta pasta o arquivo 'executable.exe' infinitamente ". Você pode usar o sistema de arquivos /proc do Cygwin para examinar o uso de memória de executable.exe .

#!/bin/bash
find . -type f |
    while read FILE
    do
        set -- $(/bin/ls -l "$FILE")
        [ "$5" -lt 120000 -o "$5" -gt 200000 ] && mv "$FILE" folder
    done
echo "Files copied!"
if cd folder
then
    sh toto.sh
else
    echo "Failed to cd into folder!" >&2
fi

BTW, meus números não são exatamente de 200 kilobytes e 120 kilobytes. Sinta-se à vontade para fazer as contas sozinho (por exemplo, 200 * 1024 e 120 * 1024) para obter as contagens de bytes exatas.

    
por 28.05.2012 / 23:56