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

Есть идеи?

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

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

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

2 ответа2

5

Обновление: поскольку вы указали, что используете 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 в backticks и передайте ее в качестве первого аргумента mv:

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

    находить . -name "* .exe" \(-size +200k -o -size -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, если @fsize GTR 204800 (echo @path), иначе, если @fsize LSS 122880 (echo @path)"

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

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

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

    Get-ChildItem -Recurse | Где-объект {$ _.Расширение -eq ".exe" -and ($ _.Длина -gt 204800 -или $ _.Длина -lt 122880)}

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

    Чтобы переместить файлы, перенаправьте вывод вышеизложенного в командлет Move-Item.

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

    находить . -name "* .exe" \(-size +200k -o -size -120k \)

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

    Чтобы переместить файлы, используйте аргумент -exec .

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

2

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .