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 find
comando:
find . -name "*.exe" \( -size +200k -o -size -120k \)
Para mover todos los archivos coincidentes a otro directorio, tiene varias opciones.
Utilice el
-exec
argumento que (como sugiere el nombre) le permite ejecutar un comando determinado para cada archivo coincidente. Verman find
para 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 mv
para obtener información sobre ese comando.Alternativamente, incluya todo el
find
comando entre comillas invertidas y páselo como primer argumento amv
:mv `buscar. -nombre "*.exe" \( -tamaño +200k -o -tamaño -120k \)` ./miCarpeta
También puedes lograr lo mismo canalizando la salida del
find
comando axargs
: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 xargs
para 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.
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.
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 del
forfiles
yif
comandos.Para mover los archivos, reemplácelos
echo @path
conmove @path C:\destination\folder
.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.
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
find
comando:encontrar . -nombre "*.exe" \( -tamaño +200k -o -tamaño -120k \)
Para más información, ver
man find
.Para mover los archivos, use el
-exec
argumento.
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 /proc
el 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.