我想在当前文件夹及其子文件夹中搜索所有大于 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 \)
要将所有匹配的文件移动到另一个目录,您有几种选择。
使用
-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
:查找 . -name "*.exe" \( -size +200k -o -size -120k \) | xargs -i mv {} ./myFolder
再次,{}
用当前文件名替换。请参阅man xargs
了解更多信息。
最后,执行MyExec.exe
(我假设您使用 Wine 来完成此操作):
wine ./myFolder/MyExec.exe
我将在下面保留我的原始答案,以防有人需要在 Windows 上做类似的事情。
有几种选项,取决于您想如何执行搜索。
既然您提到了 .exe 文件,我假设您使用的是 Windows。第一个选项是使用 Windows 资源管理器中的搜索框。只需导航到您要开始搜索的文件夹,点击F3并输入以下搜索查询:
*.exe(大小:<120kB 或 大小:>200kB)
有关详细信息,请参阅For more information, see在 Windows 中搜索的高级技巧。
要移动文件,只需选择它们并将它们拖放(或剪切粘贴)到目标文件夹。
如果您想从命令行执行此操作(例如,如果该过程需要自动化):
forfiles /m *.exe /s /c“cmd /c 如果@fsize GTR 204800(echo @path)否则如果@fsize LSS 122880(echo @path)”
要移动文件,请替换
echo @path
为move @path C:\destination\folder
。另外,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)。
要移动文件,请将上面的输出通过管道传输到移動項目执行以下命令:
最后,如果您有 Cygwin 或其他可用的 Unix 兼容 shell(我假设您有,来自“bash”标签),您也可以使用以下命令
find
:查找 .-name "*.exe" \(-size +200k -o -size -120k \)
有关详细信息,请参阅For more information, see
man 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)以获得准确的字节数。