Как распаковать zip-архивы и одновременно удалить файлы, которые я только что распаковал?

Как распаковать zip-архивы и одновременно удалить файлы, которые я только что распаковал?

У меня большой zip-файл (101 ГБ), и у меня недостаточно места на диске, чтобы напрямую скопировать все файлы внутри zip-архива. Мне было интересно, есть ли способ извлечь содержимое zip-файла и в то же время удалить файлы, которые уже были скопированы из архива. Таким образом, в конце действия у меня будет zip-файл без ничего внутри и папка со всем содержимым zip-файла. Я должен упомянуть, что в zip-файле есть папки с фотографиями внутри этих папок. Как мне скопировать/удалить фотографии по одной? Я открыт для использования Powershell, командной строки, C++ и Python.

решение1

Попробуйте это с помощью PowerShell на основе измененного кода из https://stackoverflow.com/questions/20269202/удаление-файлов-из-zip-файла-с-powershell. Я изменил его в соответствии с вашими потребностями.

[Reflection.Assembly]::LoadWithPartialName("System.IO.Compression")
$zipfile = "Zip file path here"
$OutFolder = "Output folder here"
$stream = New-Object IO.FileStream($zipfile, [IO.FileMode]::Open)
$mode   = [IO.Compression.ZipArchiveMode]::Update
$zip    = New-Object IO.Compression.ZipArchive($stream, $mode)
$zip.Entries | Foreach {
   $ToDel = $_  
  [System.IO.Compression.ZipFileExtensions]::ExtractToFile($_,"$($OutFolder)\$($_.Name)",$true)
$ToDel.Delete()
}
$zip.Dispose()
$stream.Close()
$stream.Dispose()

решение2

Я знаю, что это довольно старо, но информация в нем неверна. Чтобы добраться до ZipFileExtensions, вам сначала нужно иметь ссылку на System.IO.Compression.FileSystem. Это было бы намного проще сделать, написав немного кода на C#.

Энди

Связанный контент