Buscar archivo exe dentro de una condición

Buscar archivo exe dentro de una condición

Quiero buscar todos los archivos .exe de más de 200 kB o menos de 120 kB en la carpeta actual y sus subcarpetas. Luego quiero moverlos a otra carpeta llamada "carpeta" y ejecutar en esta carpeta el archivo llamado "ejecutable.exe" infinitamente y mostrar información sobre su consumo de memoria.

¿Algunas ideas?

Estoy usando Linux Mint. Utilicé el comando buscar para buscar archivos ".exe", segúnLa respuesta de Indrek..

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

Ahora lo que quiero hacer es mover esos archivos a otra carpeta llamada "myFolder", y después de esto tengo que ejecutar cualquier archivo en esta carpeta llamada "MyExec.exe".

Respuesta1

Actualización: dado que especificaste que estás usando Linux, la mayoría de las opciones que describí originalmente son irrelevantes, excepto el findcomando:

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

Para mover todos los archivos coincidentes a otro directorio, tiene varias opciones.

  1. Utilice el -execargumento que (como sugiere el nombre) le permite ejecutar un comando determinado para cada archivo coincidente. Verman findpara más información.

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

    Aquí, {}se reemplaza con el nombre de cada archivo a medida que se procesa. Ver tambiénman mvpara obtener información sobre ese comando.

  2. Alternativamente, incluya todo el findcomando entre comillas invertidas y páselo como primer argumento a mv:

    mv `buscar. -nombre "*.exe" \( -tamaño +200k -o -tamaño -120k \)` ./miCarpeta
  3. También puedes lograr lo mismo canalizando la salida del findcomando a xargs:

    encontrar . -name "*.exe" \( -size +200k -o -size -120k \) | xargs -i mv {} ./miCarpeta

Una vez más, {}se reemplaza con el nombre de archivo actual. Verman xargspara más información.

Finalmente, para ejecutar MyExec.exe(supongo que estás usando Wine para esto):

wine ./myFolder/MyExec.exe

Conservaré mi respuesta original a continuación, en caso de que alguien necesite hacer algo similar en Windows.


Hay varias opciones, dependiendo de cómo quieras ejecutar tu búsqueda.

  1. Como mencionas archivos .exe, supongo que estás en Windows. La primera opción sería utilizar el cuadro de búsqueda en el Explorador de Windows. Simplemente navegue hasta la carpeta donde desea iniciar su búsqueda, presione F3e ingrese la siguiente consulta de búsqueda:

    *.exe (Tamaño:<120kB O Tamaño:>200kB)

    Para más información, verConsejos avanzados para buscar en Windows.

    Para mover los archivos, simplemente selecciónelos y arrástrelos y suéltelos (o córtelos y péguelos) en la carpeta de destino.

  2. Si desea hacer esto desde la línea de comando (por ejemplo, si el proceso necesita ser automatizado):

    forfiles /m *.exe /s /c "cmd /c si @fsize GTR 204800 (echo @path) sino si @fsize LSS 122880 (echo @path)"

    Para obtener más información, consulte la documentación delforfilesyifcomandos.

    Para mover los archivos, reemplácelos echo @pathcon move @path C:\destination\folder.

  3. Alternativamente, Powershell proporciona una sintaxis más limpia:

    Obtener-ChildItem -Recurse | Donde-Objeto { $_.Extensión -eq ".exe" -y ( $_.Longitud -gt 204800 -o $_.Longitud -lt 122880 ) }

    Para obtener más información, consulte la documentación en elGet-ChildItemyDonde-Objetocmdlets. Tenga en cuenta que los tamaños de los archivos están en bytes (204800 B = 200 kB y 122880 B = 120 kB).

    Para mover los archivos, canalice la salida de lo anterior alMover elementocmdlet.

  4. Finalmente, si tiene Cygwin o algún otro shell compatible con Unix disponible (lo cual supongo que sí, por la etiqueta "bash"), también puede usar el findcomando:

    encontrar . -nombre "*.exe" \( -tamaño +200k -o -tamaño -120k \)

    Para más información, verman find.

    Para mover los archivos, use el -execargumento.

En cuanto a la segunda parte de su pregunta, tal vez podría explicar qué está tratando de lograr al ejecutar "executable.exe" y cómo se relaciona con la búsqueda y el movimiento de otros archivos .exe.

Respuesta2

El siguiente código Bash debería mover los archivos. No sé a qué te refieres con "ejecutar en esta carpeta el archivo 'ejecutable.exe' infinitamente". Es posible que pueda utilizar /procel sistema de archivos de Cygwin para examinar el uso de memoria 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

Por cierto, mis números no son exactamente 200 kilobytes y 120 kilobytes. Siéntase libre de hacer los cálculos usted mismo (por ejemplo, 200 * 1024 y 120 * 1024) para obtener recuentos de bytes exactos.

información relacionada