gpt4 book ai didi

linux - 在不解压缩的情况下操作 zip 文件 ( linux && (bash || cgi script) ) 中的文件夹结构

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:37 25 4
gpt4 key购买 nike

我想编写一个脚本 来处理许多zip 文件。所有存档文件中都有相同的文件夹结构。我想改变这一点。

我正在阅读 zip 手册一段时间,但我不知道如何执行以下操作。我想知道,是否可以在不解压缩存档文件的情况下完成这些任务?

  1. 将 zip 存档中的文件从文件夹 1 移动到另一个文件夹 2。
  2. 重命名 zip 存档文件中的文件夹。

例子:

zip 文件中的原始结构:

       +folder0
+ folder1
+folder2
- file1.xyz
- file3.xyz
...
+folder3
- file4.xyz
...
...

我想将其更改为:

        +newFolderName
+folder2
- file1.xyz
- file3.xyz
...
+folder3
- file4.xyz
...

一种可能的方式:

  1. folder1 的子文件夹移动到 folder0
  2. 删除文件夹1
  3. folder0 重命名为 newFolderName

为什么我需要在不解压缩存档文件的情况下执行此操作:

  • 磁盘空间不足(压缩文件很大)
  • 正如我在桌面模式下所体验的那样,重命名 zip 文件中的文件夹比解压缩 -> 更改文件夹名称 -> 再次压缩要快得多。我需要一个运行速度尽可能快的脚本。
  • 这个想法失败了,创建一个 ram 磁盘并在那里进行解压缩(内存不足)
  • 另一个想法:我可以将 zip 文件挂载为分区,然后像真实 分区一样操作吗?

我可以在服务器上安装应用程序,如果 zip 应用程序不是完成此任务的最佳工具。

有人有过相同任务的经验吗?

感谢您的建议。

编辑:

正如我在@Nickolay Olshevsky 的回答中读到的,此功能可能不会在 zip 和其他官方 linux 命令行工具/应用程序中实现。所以我开始以一种不同的方式寻找解决方案。

PHP 可以用作 CGI 脚本,我在服务器上有 PHP 解释器,所以解决方案(在 PHP 中作为 CGI 脚本)是:(类似这样的东西可以用 libzip 和许多其他编程/脚本语言编写 python/ruby/... 脚本或 c/c++ 应用程序)

#!/usr/bin/php5
<?php
//requires PHP5.3+
$path = $argc?$argv[1]:'./';
$dh = opendir($path);
$oldPath = 'folder0/folder1/';
$newPath = 'newFolder/'
$zip = new ZipArchive();
$warning = false;
while( $entry = readdir( $dh ) ){
if( 'zip' == array_pop(explode('.',$entry)) && $zip->open($entry) ){
$success = true;
print "Processing zip archive $path$entry: \n";
for( $i=0; $i < $zip->numFiles; $i++ ){
$oldName = $zip->getNameIndex($i);
$newName = preg_replace("#^$oldPath#",
$newpath,
$oldName);
print " Renaming $oldName to $newName ... "
if($zip->renameIndex($i,$newName)){
print "OK\n";
}else{
$warning = true;
$success = false;
print "FAILED\n";
break;
}
}
if( $zip->close() ){
print "$path$entry PROCESSED\n";
}else{
print "Warning: Something went wrong with $path$entry !!!\n";
}
}
}
closedir($dh);
return $warning?1:0;
?>

但回到我最初的问题:

当有人找到仅使用 bash 和官方 (debian) linux 命令行 zip/gzip/... 等工具的解决方案时,我接受这个答案。

最佳答案

由于 ZIP 存档结构,这不是一件容易的事。那里的路径存储为可变长度字段,当您更改文件路径时,它将占用更多/更少的字节,您需要将所有数据移动到该文件记录之后。这是可能的,无需重新压缩,但我怀疑有人实现了这样的功能。

关于linux - 在不解压缩的情况下操作 zip 文件 ( linux && (bash || cgi script) ) 中的文件夹结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16280391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com