例如,我想使用 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"
}