Procure por arquivo exe dentro de uma condição

Procure por arquivo exe dentro de uma condição

Desejo pesquisar todos os arquivos .exe maiores que 200 kB ou menores que 120 kB na pasta atual e suas subpastas. Depois 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 seu consumo de memória.

Alguma ideia?

Estou usando o Linux Mint. Usei o comando find para procurar arquivos ".exe", porA resposta de Indrek.

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

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

Responder1

Atualização: como você especificou que está usando Linux, a maioria das opções que descrevi originalmente são irrelevantes, exceto o findcomando:

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 -execargumento, que (como o nome sugere) permite executar um determinado comando para cada arquivo correspondente. Verman findPara maiores informações.

    encontrar . -name "*.exe" \( -size +200k -o -size -120k \) -exec mv {} ./myFolder \;

    Aqui, {}é substituído pelo nome de cada arquivo à medida que é processado. Veja tambémman mvpara obter informações sobre esse comando.

  2. Como alternativa, coloque o findcomando inteiro entre crases e passe-o como o primeiro argumento para mv:

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

    encontrar . -nome "*.exe" \( -tamanho +200k -o -tamanho -120k \) | xargs -i mv {} ./minhaPasta

Mais uma vez, {}é substituído pelo nome do arquivo atual. Verman xargsPara maiores informações.

Finalmente, para executar MyExec.exe(presumo que você esteja usando o Wine para isso):

wine ./myFolder/MyExec.exe

Preservarei 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. Já que você mencionou arquivos .exe, presumo que você esteja no Windows. A primeira opção seria usar a caixa de pesquisa do Windows Explorer. Basta navegar até a pasta onde deseja iniciar sua pesquisa, clicar F3e inserir a seguinte consulta de pesquisa:

    *.exe (Tamanho:<120kB OU Tamanho:>200kB)

    Para mais informações, vejaDicas avançadas para pesquisar no Windows.

    Para mover os arquivos, basta selecioná-los e arrastá-los e soltá-los (ou recortá-los e colá-los) na pasta de destino.

  2. Se você quiser fazer isso na 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 doforfileseifcomandos.

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

  3. Alternativamente, o Powershell fornece uma sintaxe mais limpa:

    Get-ChildItem-Recurse | Where-Object {$_.Extension -eq ".exe" -and ($_.Length -gt 204800 -ou $_.Length -lt 122880) }

    Para obter mais informações, consulte a documentação noGet-ChildItemeOnde-Objetocmdlets. Observe que os tamanhos dos arquivos estão em bytes (204.800 B = 200 kB e 122.880 B = 120 kB).

    Para mover os arquivos, canalize a saída acima para oMover itemcmdlet.

  4. Finalmente, se você tiver Cygwin ou algum outro shell compatível com Unix disponível (o que presumo que você tenha, na tag "bash"), você também pode usar o findcomando:

    encontrar . -nome "*.exe" \( -tamanho +200k -o -tamanho -120k \)

    Para mais informações, vejaman find.

    Para mover os arquivos, use o -execargumento.

Quanto à segunda parte da sua pergunta, talvez você possa explicar o que está tentando alcançar com a execução de "executável.exe" e como isso se relaciona com a localização e movimentação de outros arquivos .exe.

Responder2

O código Bash abaixo deve mover os arquivos. Não sei o que você quer dizer com "execute nesta pasta o arquivo 'executável.exe' infinitamente". Você pode usar /proco sistema de arquivos do Cygwin para examinar o uso de memória do 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

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

informação relacionada