使用 Windows shell 创建分割成最大大小块的存档

使用 Windows shell 创建分割成最大大小块的存档

例如,我想使用 cmd 或 powershell 将 100GB 的目录压缩为 10 个 10GB 的存档,无需安装其他工具,无需交互。使用tar会很棒,但其他方法也可以

我最有可能想压缩成 10 个单独的档案,这些档案可以单独提取,而无需在后期合并在一起。最好先压缩 1 个大文件,然后将其拆分。但如果这个愿望很难实现,我会视之为理所当然。

在 Linux 中我使用类似这样的方法

tar --tape-length=2097000 -cMv --file=tar_archive.{tar,tar-{2..100}} dir1

但 Windows tar 不支持--tape-length

如何使其在 Windows 中工作?

答案1

Linux 上最好的工具是 PowerShell(对于 Linux 用户来说,这需要一点学习曲线)。

查看帖子 将文件夹中的文件压缩成多个最大大小的“独立”ZIP 文件

Minkulai 的回答包含一个 PowerShell 脚本,该脚本将文件收集成最大 50GB 的块,并将这些文件压缩到一个存档中。您可以根据需要修改脚本以更改大小。

我复制了以下脚本:

$filesFolderPath = "Path of where the PDFs are"
$archivePath = "Path to where the archive will be"

$files = Get-ChildItem -Path $filesFolderPath -Recurse | Where-Object { $_.Extension -eq ".pdf" }
$filesToArchive = @()
$archiveSize = 0
$counter = 0

foreach ($file in $files) {
    $fileSize = [Math]::Round(($file.Length / 1MB), 2)
    
    # Check if the combined size of the files to be archived exceeds 50 MB
    if (($archiveSize + $fileSize) -gt 49) {
        # Create the archive if the combined size exceeds 50 MB
        $counter++
        Compress-Archive -Path $filesToArchive.FullName -DestinationPath "$($archivePath)\Archive-$counter.zip"
        $filesToArchive = @()
        $archiveSize = 0
    }

    # Add the file to the list of files to be archived
    $filesToArchive += $file
    $archiveSize += $fileSize
}

# Create the final archive if there are any remaining files to be archived
if ($filesToArchive.Count -gt 0) {
    $counter++
    Compress-Archive -Path $filesToArchive.FullName -DestinationPath "$($archivePath)\Archive-$counter.zip"
}

相关内容