按条件搜索 exe 文件

按条件搜索 exe 文件

我想在当前文件夹及其子文件夹中搜索所有大于 200 kB 或小于 120 kB 的 .exe 文件。然后我想将它们移动到另一个名为“folder”的文件夹中,并在此文件夹中无限执行名为“executable.exe”的文件,并显示有关其内存消耗的一些信息。

有任何想法吗?

我使用的是 Linux Mint。我使用 find 命令搜索“.exe”文件,Indrek 的回答

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

    查找 . -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(大小:<120kB 或 大小:>200kB)

    有关详细信息,请参阅For more information, see在 Windows 中搜索的高级技巧

    要移动文件,只需选择它们并将它们拖放(或剪切粘贴)到目标文件夹。

  2. 如果您想从命令行执行此操作(例如,如果该过程需要自动化):

    forfiles /m *.exe /s /c“cmd /c 如果@fsize GTR 204800(echo @path)否则如果@fsize LSS 122880(echo @path)”

    有关详细信息,请参阅forfilesif命令。

    要移动文件,请替换echo @pathmove @path C:\destination\folder

  3. 另外,Powershell 提供了更简洁的语法:

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

    有关详细信息,请参阅获取子项哪里对象cmdlet。请注意,文件大小以字节为单位(204800 B = 200 kB,122880 B = 120 kB)。

    要移动文件,请将上面的输出通过管道传输到移動項目执行以下命令:

  4. 最后,如果您有 Cygwin 或其他可用的 Unix 兼容 shell(我假设您有,来自“bash”标签),您也可以使用以下命令find

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

    有关详细信息,请参阅For more information, seeman find

    要移动文件,请使用-exec参数。

至于问题的第二部分,也许您可​​以详细说明执行“executable.exe”想要实现的目标,以及它与查找和移动其他.exe 文件的关系。

答案2

下面的 Bash 代码应该移动文件。我不知道你说的“在此文件夹中无限执行文件“executable.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)以获得准确的字节数。

相关内容