【问题标题】:how can i recursively archive every file in a folder in powershell?如何递归归档powershell文件夹中的每个文件?
【发布时间】:2011-07-29 11:38:55
【问题描述】:

我有一个文件夹,里面有很多文件和文件夹。我想通过 ftp 将该文件夹发送到远程主机。我认为 Windows ftp 客户端无法做到这一点,所以我决定将所有文件存档(到某个 zip 或其他文件中),然后通过 ftp 发送一个文件。我怎么能在powershell(2.0)中做到这一点?压缩并不重要,重要的是必须只有 1 个文件。

提前致谢。

【问题讨论】:

标签: powershell ftp zip archive


【解决方案1】:

因此您可以递归地获取文件夹中的文件。在此之后,您可以将它们添加到您的 ziparchive 并通过 FTP 发送它们。 Powershell 没有归档文件的功能。但是有一些外部工具。好的是来自 7zip 和 dll SharpZipLib 的命令行。

$itemslist = Get-ChildItem C:\\folder -recurse
$filelist = New-Object System.Collections.ArrayList

foreach ($item in $itemslist)
{
    if ($item.GetType().FullName -eq 'System.IO.FileInfo')
    {
        $filelist.Add($item)
    }
}

foreach ($file in $filelist)
{
    //Add file to your ZipArchive
}

//Send ZipArchive

【讨论】:

    【解决方案2】:
    【解决方案3】:

    使用DotNetZip 非常简单。

    [System.Reflection.Assembly]::LoadFrom("c:\\dev\dotnet\\Ionic.Zip.dll");
    
    $directoryToZip = "c:\\temp";
    $zipfile = new-object Ionic.Zip.ZipFile;
    $zipfile.AddEntry("Readme.txt", "This is a zipfile created from within powershell.")
    $zipfile.AddDirectory($directoryToZip, "home")
    $zipfile.Save("ZipFiles.ps1.out.zip");
    $zipfile.Dispose();
    

    ZipFile 对象为您执行递归,作为the ZipFile.AddDirectory() method 的一部分。

    DotNetZip 是一个免费库。


    一个附加评论 - 作为软件版本的一部分,我过去有理由进行 FTP 上传。我发现在连续上传时,大部分文件都没有改变。所以我引入了一个“目录”文件,它将每个文件的 MD5 哈希映射到其名称。在上传之前,我会下载目录,然后将表中的每个 MD5 与磁盘文件的 MD5 进行对比。如果它们匹配,则无需上传该特定文件。这节省了大量时间和数据传输。

    不过,我没有用于此的 powershell 脚本。 :

    【讨论】:

      最近更新 更多