我有一个简单的文件夹结构,我需要压缩上传到AWS Lambda函数
node-modules/
index.js
package.json
上面的文件位于根目录中。基本上最终目标是我想要所有这些文件和子文件/目录的zip,而不是原样的结构。
当我尝试运行下面的命令时,它说它无法访问E://apps/myapp/release.zip
,因为它被另一个进程使用。但是我可以看到它开始创建release.zip,但它没有所有内容。
Add-Type -Assembly "System.IO.Compression.FileSystem";
[System.IO.Compression.ZipFile]::CreateFromDirectory(E://apps/myapp, E://apps/myapp/release.zip);
所以我尝试了另一种方法。获取文件夹和两个文件并将它们复制到一个临时文件夹中,然后尝试将其压缩回根目录。
Copy-Item E://apps/myapp E://apps/myapp/temp -recurse
我确实看到了一个temp/
文件夹,但在临时文件夹中,它就像一个永无止境的副本,直到文件路径太长。
任何提示都会非常感激。
答案 0 :(得分:3)
问题可能是您正在尝试压缩的同一文件夹中创建zip文件。当你尝试使用临时文件夹时,你基本上做同样的事情,因此开始。
尝试在被压缩的源文件夹之外创建目标。
$source = "E://apps/myapp"
$destination = "E://apps/myapp.release.zip"
# If the archive already exists, an IOException exception is thrown.
if(Test-Path $destination) {
Remove-Item -Path $destination -Force -Recurse -Confirm:$false
}
[Reflection.Assembly]::LoadWithPartialName( "System.IO.Compression.FileSystem" )
[System.IO.Compression.ZipFile]::CreateFromDirectory($source, $destination)
# Once archive created delete folder
if(Test-Path $destination) {
Remove-Item -Path $source -Force -Recurse -Confirm:$false
Write-Host "directory removed: $source"
}