Поиск exe-файла в условиях

Поиск exe-файла в условиях

Я хочу найти все файлы .exe размером более 200 кБ или менее 120 кБ в текущей папке и ее подпапках. Затем я хочу переместить их в другую папку с именем "folder" и бесконечно выполнять в этой папке файл с именем "executable.exe" и показать некоторую информацию о его потреблении памяти.

Есть идеи?

Я использую Linux Mint. Я использовал команду find для поиска файлов ".exe", согласноОтвет Индрека.

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

Теперь мне нужно переместить эти файлы в другую папку под названием «myFolder», а после этого мне нужно будет выполнить любой файл в этой папке под названием «MyExec.exe».

решение1

Обновление: поскольку вы указали, что используете Linux, большинство изначально описанных мною параметров неактуальны, за исключением команды find:

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

Чтобы переместить все соответствующие файлы в другой каталог, у вас есть несколько вариантов.

  1. Используйте -execаргумент, который (как следует из названия) позволяет выполнить заданную команду для каждого соответствующего файла. Смотритеman findЧтобы получить больше информации.

    найти . -name "*.exe" \( -size +200k -o -size -120k \) -exec mv {} ./myFolder \;

    Здесь {}заменяется на имя каждого файла по мере его обработки. Смотрите такжеman mvдля получения информации об этой команде.

  2. Либо заключите всю findкоманду в обратные кавычки и передайте ее в качестве первого аргумента mv:

    mv `find . -name "*.exe" \( -size +200k -o -size -120k \)` ./myFolder
  3. Того же результата можно добиться, передав вывод команды findв xargs:

    найти . -имя "*.exe" \( -размер +200k -o -размер -120k \) | xargs -i mv {} ./myFolder

Еще раз, {}заменяется на текущее имя файла. Смотретьman xargsЧтобы получить больше информации.

Наконец, выполните MyExec.exe(предполагаю, что вы используете для этого Wine):

wine ./myFolder/MyExec.exe

Я сохраню свой оригинальный ответ ниже на случай, если кому-то понадобится сделать что-то подобное в Windows.


Существует несколько вариантов в зависимости от того, как вы хотите выполнить поиск.

  1. Поскольку вы упомянули файлы .exe, я предполагаю, что вы используете Windows. Первый вариант — использовать поле поиска в проводнике Windows. Просто перейдите в папку, в которой вы хотите начать поиск, нажмите F3и введите следующий поисковый запрос:

    *.exe (Размер:<120 КБ ИЛИ Размер:>200 КБ)

    Для получения более подробной информации см.Дополнительные советы по поиску в Windows.

    Чтобы переместить файлы, просто выберите их и перетащите (или вырежьте и вставьте) в целевую папку.

  2. Если вы хотите сделать это из командной строки (например, если процесс необходимо автоматизировать):

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

    Для получения дополнительной информации см. документацию поforfilesиifкоманды.

    Чтобы переместить файлы, замените echo @pathих на move @path C:\destination\folder.

  3. В качестве альтернативы Powershell предоставляет более понятный синтаксис:

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

    Для получения дополнительной информации см. документацию поПолучить-ChildItemиГде-ОбъектКомандлеты. Обратите внимание, что размеры файлов указаны в байтах (204800 Б = 200 кБ и 122880 Б = 120 кБ).

    Чтобы переместить файлы, направьте вывод вышеприведенной команды вПереместить элементкомандлет.

  4. Наконец, если у вас есть Cygwin или какая-либо другая совместимая с Unix оболочка (я предполагаю, что она у вас есть, судя по тегу «bash»), вы также можете использовать команду find:

    найти . -имя "*.exe" \( -размер +200k -o -размер -120k \)

    Для получения более подробной информации см.man find.

    Для перемещения файлов используйте -execаргумент.

Что касается второй части вашего вопроса, возможно, вы могли бы пояснить, чего вы пытаетесь добиться, выполняя «executable.exe» и как это связано с поиском и перемещением других .exe-файлов.

решение2

Нижеприведенный код Bash должен перемещать файлы. Я не знаю, что вы имеете в виду под "запускать в этой папке файл 'executable.exe' бесконечно". Вы можете использовать /procфайловую систему Cygwin для проверки использования памяти 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

Кстати, мои цифры не совсем 200 килобайт и 120 килобайт. Можете сами посчитать (например, 200 * 1024 и 120 * 1024), чтобы получить точное количество байтов.

Связанный контент