我需要创建一个任务,从网站下载一个经过 gzip 压缩的文件,然后解压并复制到服务器上的各个文件夹中。我真的不知道实现此目的的最佳方法是什么。有什么建议/最佳实践吗?
我正在考虑创建一个 bash 脚本来执行此操作,但我不知道如何解压缩文件,甚至在这里我也不知道是否应该使用普通 shell 还是 powershell。
答案1
@danielgek — 从 PowerShell 的角度来看,您可以使用以下内容:
从网站下载文件的语法:
$source = "http://example.com/file.zip“
$目标=“c:\文件.zip”
调用-WebRequest $source-OutFile $destination
这是一个解压缩文件的函数。
函数 Extract-Zip($file,$destination) {
$shell = new-object-com shell.application
$zip = $shell.名称空间($文件)
foreach($item 在 $zip.items() 中) {
$shell.命名空间($destination).copyhere($item) }
}
您可以在脚本中使用该函数,如下所示:
Extract-Zip –File “C:\file.zip” –Destination “C:\destination”
编辑:这是您可以用于 GZip 文件的函数:
Function DeGZip-File{
Param(
$infile,
$outfile = ($infile -replace '\.gz$','')
)
$input = New-Object System.IO.FileStream $inFile, ([IO.FileMode]::Open), ([IO.FileAccess]::Read), ([IO.FileShare]::Read)
$output = New-Object System.IO.FileStream $outFile, ([IO.FileMode]::Create), ([IO.FileAccess]::Write), ([IO.FileShare]::None)
$gzipStream = New-Object System.IO.Compression.GzipStream $input, ([IO.Compression.CompressionMode]::Decompress)
$buffer = New-Object byte[](1024)
while($true){
$read = $gzipstream.Read($buffer, 0, 1024)
if ($read -le 0){break}
$output.Write($buffer, 0, $read)
}
$gzipStream.Close()
$output.Close()
$input.Close()
}
$infile='C:\Temp\DECfpc1new.csv.gz'
$outfile='c:\temp\DECfpc1new.csv'
DeGZip-File $infile $outfile`