如何递归归档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递归搜索目录中的所有文件,包括隐藏目录中的隐藏文件?