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 find
comando:
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
-exec
argumento, que (como o nome sugere) permite executar um determinado comando para cada arquivo correspondente. Verman find
Para 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 mv
para obter informações sobre esse comando.Como alternativa, coloque o
find
comando inteiro entre crases e passe-o como o primeiro argumento paramv
:mv `encontrar. -name "*.exe" \( -size +200k -o -size -120k \)` ./myFolder
Você também pode fazer a mesma coisa canalizando a saída do
find
comando paraxargs
:encontrar . -nome "*.exe" \( -tamanho +200k -o -tamanho -120k \) | xargs -i mv {} ./minhaPasta
Mais uma vez, {}
é substituído pelo nome do arquivo atual. Verman xargs
Para 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.
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.
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 do
forfiles
eif
comandos.Para mover os arquivos, substitua
echo @path
pormove @path C:\destination\folder
.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.
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
find
comando:encontrar . -nome "*.exe" \( -tamanho +200k -o -tamanho -120k \)
Para mais informações, veja
man find
.Para mover os arquivos, use o
-exec
argumento.
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 /proc
o 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.