gpt4 book ai didi

powershell 脚本太慢(文件枚举)

转载 作者:行者123 更新时间:2023-12-02 22:37:57 25 4
gpt4 key购买 nike

我有一个简单的 PowerShell 脚本,它运行目录树,并以 JSON 格式列出文件。

每个条目都是以下形式:

{id: 文件名, 大小: 字节数}

对于短列表工作正常,但对于大目录非常慢。我还想将内容写入文件 (manifest.json)。

我更擅长编写 C# .NET(我会使用 Directory.EnumerateFiles() )

但我想我会看看能否在 powershell 中更轻松地完成简单的事情。

但是当我达到 10K 个条目时,这个脚本真的陷入了困境。

$src = "G:\wwwroot\BaseMaps\BigBlueMarble"
$path = $src + "\*"
$excludes = @("*.json", "*.ps1")
$version = "1.1"
Write-Host "{"
Write-Host "`"manifest-version`": `"$version`","
Write-Host "`"files`": ["

$dirs = Get-Item -Path $path -Exclude $excludes
$dirs | Get-ChildItem -Recurse -File | % {
$fpath = $_.FullName.Replace($src, "").Replace("\","/")
$date = $_.LastWriteTime
$size = $_.Length
$id = $_.BaseName
Write-Host "{`"id`": `"$id`", `"size`": `"$size`"},"
}
Write-Host "]"
Write-Host "}"

最佳答案

Get-ChildItem 可能比较慢(尽管它在 PowerShell 3 中的速度似乎是 v2 中的两倍),write-host 正在减慢您的速度也很多。在包含 27000 多个文件的目录结构中,以下代码的运行时间为 16.15 秒,而您的代码为 21.08 秒。在包含大约 2400 个文件的较小目录中,时间分别为 1.15 秒和 1.22 秒。

gci $path -file -Recurse |
select @{name="fpath";expression={$_.fullname.replace($src,"").replace("\","/")}},lastwritetime,@{Name="size";Expression={$_.length}},@{Name="id";Expression={$_.basename}}|
select id,size|
ConvertTo-Json

生成的 JSON 没有您的 header ,但事后您应该能够处理它。

关于powershell 脚本太慢(文件枚举),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17322983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com