Я хочу найти все файлы .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 \)
Чтобы переместить все соответствующие файлы в другой каталог, у вас есть несколько вариантов.
Используйте
-exec
аргумент, который (как следует из названия) позволяет выполнить заданную команду для каждого соответствующего файла. Смотритеman find
Чтобы получить больше информации.найти . -name "*.exe" \( -size +200k -o -size -120k \) -exec mv {} ./myFolder \;
Здесь
{}
заменяется на имя каждого файла по мере его обработки. Смотрите такжеman mv
для получения информации об этой команде.Либо заключите всю
find
команду в обратные кавычки и передайте ее в качестве первого аргументаmv
:mv `find . -name "*.exe" \( -size +200k -o -size -120k \)` ./myFolder
Того же результата можно добиться, передав вывод команды
find
вxargs
:найти . -имя "*.exe" \( -размер +200k -o -размер -120k \) | xargs -i mv {} ./myFolder
Еще раз, {}
заменяется на текущее имя файла. Смотретьman xargs
Чтобы получить больше информации.
Наконец, выполните MyExec.exe
(предполагаю, что вы используете для этого Wine):
wine ./myFolder/MyExec.exe
Я сохраню свой оригинальный ответ ниже на случай, если кому-то понадобится сделать что-то подобное в Windows.
Существует несколько вариантов в зависимости от того, как вы хотите выполнить поиск.
Поскольку вы упомянули файлы .exe, я предполагаю, что вы используете Windows. Первый вариант — использовать поле поиска в проводнике Windows. Просто перейдите в папку, в которой вы хотите начать поиск, нажмите F3и введите следующий поисковый запрос:
*.exe (Размер:<120 КБ ИЛИ Размер:>200 КБ)
Для получения более подробной информации см.Дополнительные советы по поиску в Windows.
Чтобы переместить файлы, просто выберите их и перетащите (или вырежьте и вставьте) в целевую папку.
Если вы хотите сделать это из командной строки (например, если процесс необходимо автоматизировать):
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
.В качестве альтернативы Powershell предоставляет более понятный синтаксис:
Get-ChildItem -Recurse | Where-Object { $_.Extension -eq ".exe" -and ( $_.Length -gt 204800 -or $_.Length -lt 122880 ) }
Для получения дополнительной информации см. документацию поПолучить-ChildItemиГде-ОбъектКомандлеты. Обратите внимание, что размеры файлов указаны в байтах (204800 Б = 200 кБ и 122880 Б = 120 кБ).
Чтобы переместить файлы, направьте вывод вышеприведенной команды вПереместить элементкомандлет.
Наконец, если у вас есть 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), чтобы получить точное количество байтов.