如何递归归档powershell文件夹中的每个文件?

Posted

技术标签:

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

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

提前致谢。

【问题讨论】:

试试这个:***.com/questions/1153126/… 【参考方案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】:

也许这可以帮助你:http://tasteofpowershell.blogspot.com/2008/08/recursion-in-powershell.html

【讨论】:

【参考方案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 脚本。 :

【讨论】:

以上是关于如何递归归档powershell文件夹中的每个文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何递归删除PowerShell中的所有空文件夹?

如何使用PowerShell递归搜索目录中的所有文件,包括隐藏目录中的隐藏文件?

使用 Powershell 递归重命名文件

递归查找文件中的文本 (PowerShell)

powershell PowerShell文件,用于根据图像尺寸递归重命名和编辑目录中的图像。

如何使用 PowerShell 递归删除具有特定名称的文件夹?