如何重命名 zip 存档中的文件而不解压并重新压缩它们?

2024-03-27

我需要将 zip 文件中的所有文件重命名为AAAAA-filename.txt to BBBBB-filename.txt,我想知道是否可以自动执行此任务,而无需提取所有文件,重命名,然后再次压缩。一次解压缩一个,重命名并再次压缩是可以接受的。

我现在拥有的是:

for file in *.zip
do
    unzip $file
    rename_txt_files.sh
    zip *.txt $file
done;

但我不知道是否有一个更高级的版本,我不必使用所有额外的磁盘空间。


plan

  • 查找带有字符串的文件名的偏移量
  • 使用 dd 覆盖新名称(注意仅适用于相同的文件名长度)。否则还必须查找并覆盖 文件名长度字段..

在尝试此操作之前备份您的 zip 文件

zip_重命名.sh

#!/bin/bash

strings -t d test.zip | \
grep '^\s\+[[:digit:]]\+\sAAAAA-\w\+\.txt' | \
sed 's/^\s\+\([[:digit:]]\+\)\s\(AAAAA\)\(-\w\+\.txt\).*$/\1 \2\3 BBBBB\3/g' | \
while read -a line; do
  line_nbr=${line[0]};
  fname=${line[1]};
  new_name=${line[2]};
  len=${#fname};
#  printf "line: "$line_nbr"\nfile: "$fname"\nnew_name: "$new_name"\nlen: "$len"\n";
  dd if=<(printf $new_name"\n") of=test.zip bs=1 seek=$line_nbr count=$len conv=notrunc  
done;

output

$ ls
AAAAA-apple.txt  AAAAA-orange.txt  zip_rename.sh
$ zip test.zip AAAAA-apple.txt AAAAA-orange.txt 
  adding: AAAAA-apple.txt (stored 0%)
  adding: AAAAA-orange.txt (stored 0%)
$ ls
AAAAA-apple.txt  AAAAA-orange.txt  test.zip  zip_rename.sh
$ ./zip_rename.sh 
15+0 records in
15+0 records out
15 bytes (15 B) copied, 0.000107971 s, 139 kB/s
16+0 records in
16+0 records out
16 bytes (16 B) copied, 0.000109581 s, 146 kB/s
15+0 records in
15+0 records out
15 bytes (15 B) copied, 0.000150529 s, 99.6 kB/s
16+0 records in
16+0 records out
16 bytes (16 B) copied, 0.000101685 s, 157 kB/s
$ unzip test.zip 
Archive:  test.zip
 extracting: BBBBB-apple.txt         
 extracting: BBBBB-orange.txt        
$ ls
AAAAA-apple.txt   BBBBB-apple.txt   test.zip
AAAAA-orange.txt  BBBBB-orange.txt  zip_rename.sh
$ diff -qs AAAAA-apple.txt BBBBB-apple.txt 
Files AAAAA-apple.txt and BBBBB-apple.txt are identical
$ diff -qs AAAAA-orange.txt BBBBB-orange.txt 
Files AAAAA-orange.txt and BBBBB-orange.txt are identical
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何重命名 zip 存档中的文件而不解压并重新压缩它们? 的相关文章

  • 包名中的“dev”后缀?

    使用 apt get 时 我看到一些软件包的名称后面有一个 dev 后缀 libreadline5 libreadline dev zlib1g zlib1g dev 这些到底是什么 我应该安装它们吗 你需要这些编译并链接因为它们提供了要链
  • Linux C 如何打开目录并获取文件描述符

    include
  • 请求失败的错误:GLXBadDrawable (C++ bgfx)

    我试图用 glfw 和 bgfx 创建一个紫色窗口作为我的游戏引擎的起点 但是在启动二进制文件时它会抛出一个错误 我正在尝试创建紫色窗口 如下图所示 我正在使用 cmake 错误是 anuj fedora D C C c o build g
  • Eclipse CDT 内置包含目录

    Under Eclipse CDT gt Project Settings gt C C General gt Paths and Symbols gt Includes gt GNU C 有一个包含路径的列表 有些是粗体的并且是特定于项目
  • 使用 Bash 比较 PHP 版本号?

    我有这个脚本 应该确保用户当前的 PHP 版本在某个范围内 尽管它应该可以工作 但某个地方有一个错误 使它认为版本超出范围 有人可以看一下并告诉我我能做什么来解决它 function version echo gawk F printf d
  • 在 shell 中将 ANSI 转换为 UTF-8

    我正在制作一个解析器 1 csv 到 3 csv 脚本 但遇到问题 我是法国人 所以用我的语言我有这样的字母 一位客户向我发送了一个 csv 文件 Linux 将其识别为 unknown 8bit 我猜是 ansi 在我的脚本中 我正在编写
  • 使用 M1 在 dockerized Linux 上安装节点画布

    我有以下Dockerfile我在 MacBook Air M1 上运行 所以在 docker 中我有带有 M1 的 linux FROM node 16 7 0 WORKDIR work CMD while true do sleep 10
  • elf .rel.text 部分中 R_386_32/R_386_PC32 的含义

    为了理解重定位的概念 我编写了一个简单的 chk c 程序 如下所示 1 include
  • shell - temp IFS 仅作为换行符。为什么这不起作用: IFS=$(echo -e '\n')

    我正在尝试使用for在 shell 中迭代带有空格的文件名 我读过一个堆栈溢出问题 https stackoverflow com questions 4128235 bash shell scripting what is the exa
  • 删除损坏的链接 Unix

    我想删除损坏的链接 但在此之前我想确认目录中是否存在链接文件 我们来调用一下链接A if a A then print ya A is ther fi But if A链接已损坏 那么我该如何检查 find L type l找到损坏的符号链
  • x86-64 Linux 中不再允许使用 32 位绝对地址?

    64 位 Linux 默认使用小内存模型 将所有代码和静态数据置于 2GB 地址限制以下 这确保您可以使用 32 位绝对地址 旧版本的 gcc 对静态数组使用 32 位绝对地址 以便节省相对地址计算的额外指令 然而 这不再有效 如果我尝试在
  • 安装pipenv导致pip3无法使用

    我安装了pipenv using pip3 install pipenv 这给了我错误ImportError cannot import name main 为了解决这个错误我遵循这些说明 https stackoverflow com q
  • Alsa:如何在 2 个输出上复制流并保存系统配置?

    我的声卡是 Audigy SE SB0570 我想不仅在扬声器上而且在耳机上同时播放相同的立体声流 我在空的 asoundrc 上尝试这个配置 pcm quad type multi slaves a pcm hw 0 0 green ho
  • awk 排序多维数组[重复]

    这个问题在这里已经有答案了 GNU awk 支持多维数组 gnu org software gawk manual gawk Arrays of Arrays q 1 1 dog q 1 2 999 q 2 1 mouse q 2 2 77
  • 使用 java.nio.Files 更改 Linux 下的文件所有者组

    我有一台 Linux 服务器 并且正在 Java 中为服务器上的多个网站运行图像调整大小作业 网站文件由不同的操作系统用户 组拥有 新创建的缩略图 预览由运行调整大小作业的用户拥有 现在我正在谷歌搜索如何在调整大小程序中更改新创建的预览 缩
  • 汇编语言中的全局_start是什么?

    这是我的汇编级代码 section text global start start mov eax 4 mov ebx 1 mov ecx mesg mov edx size int 0x80 exit mov eax 1 int 0x80
  • 文件在 rpm 规范文件中列出两次

    我的规范文件的文件部分如下所示 files prefix htdocs config prefix htdocs share settings config inc php 现在 由于配置文件已经包含在 prefix htdocs 我收到警
  • 专门逐行调试

    我有一个用 Pascal 编写的脚本 我会以这种方式调试它 在每一行停止 转储内存中所有变量的值 然后转到下一行 是否可以使用 gdb 或其他 Linux 开源工具来完成此操作 使用选项编译文件 g fpc gpc g file pas R
  • 让子进程等待直到收到父进程的信号

    我想从父级创建 N 个子级 我希望所有的孩子同时开始 一个功能 测量时间 因此 我将该函数放入信号处理程序中 当父级完成创建 分叉 所有子级时 它会向所有子级发送信号 使用kill children id 以让 make 开始 代码如下 但
  • 为什么 PS1 不更新 git 分支名称?

    PS1 w git branch grep cut b 3 100 我按上面设置我的 PS1 但在我更改分支后 它不会更新提示中的分支名称git checkout 或使用以下命令更改存储库cd 如何解决这个问题 当反引号引用位被评估时PS1

随机推荐

  • Go 中的结构体大小

    我正在研究 Go 它看起来很有前途 我想弄清楚如何获取 go 结构的大小 例如 例如 type Coord3d struct X Y Z int64 我当然知道它是 24 个字节 但我想以编程方式知道它 您有任何想法如何做到这一点吗 罗杰已
  • 如何制作具有透明背景的OpenGL渲染上下文?

    渲染上下文通常在背景上有纯色 黑色或其他颜色 请参见下图 我想知道是否可以设置一个没有装饰且具有透明背景的窗口 同时允许我在其上渲染 OpenGL 内容 这会给人一种三角形漂浮在屏幕上的错觉 透明背景应该允许您看到桌面或可能位于其后面的其他
  • Silverlight 能否访问可访问 USB 端口的 .Net 库?

    我们有一个 Net 库 可以通过 USB 端口访问一些自定义硬件 我读到 Silverlight 包含 Net 运行时的子集 所以 我的问题是 这个子集足以让 Net 库运行吗 不可以 您不能使用从 Silverlight 内部访问 USB
  • 使用 plone.memoize.ram 使 memoize 无效/阻止

    我和 Zope 实用程序提供了一种执行网络进程的方法 由于结果在一段时间内有效 我正在使用plone memoize ram缓存结果 MyClass object cache cache key def do auth self adapt
  • GitHub,推送错误:远端意外挂断

    我现在无法将本地提交推送到 github 存储库 我收到一条错误消息 Counting objects 76 done Delta compression using up to 8 threads Compressing objects
  • 如何使用jquery发送int类型参数

    我正在构建一个 Web 服务 它将使用 jquery 与网页进行通信 我想构建我的 Web 服务 使其类型安全 而不需要在服务器端执行转换 如何使用 jquery 从客户端发出 ajax 调用到需要 int 值参数的服务器 编辑 我明白这是
  • 如何在 iOS 上使用 AVMutableComposition 和 CALayers 将多个 CALayer 添加到视频文件

    我想添加多个CALayer按时间顺序一个接一个 我可以使用此链接向视频文件添加一层Here https stackoverflow com q 5997677 1450762 现在我的问题是如何添加多个CALayer到视频文件 提前致谢 最
  • 如何在程序中包含数据对象文件(图像等)并访问符号?

    我使用以下命令将几个资源文件转换为 obj 文件objcopy我将它们与我的程序源代码链接起来 我可以使用以下代码很好地访问程序中目标文件内的符号 但只能使用 GCC G Cygwin extern uint8 t data asm bin
  • 为什么 Supervisor.start_child 不起作用

    我是 Elixir 的初学者 我有一个应用程序在 application ex 中启动一个自定义主管 代码 defmodule MyApp do use Application def start type args do import S
  • 如何使用 Python 提取在 HTML 页面 javascript 块中定义的 JSON 对象?

    我正在下载其中定义了数据的 HTML 页面 方法如下 我想提取 window blog data 中定义的 JSON 对象 有没有比手动解析更简单的方法 我正在研究 Beautiful Soap 但似乎找不到一种无需解析即可返回确切对象的方
  • 如何在phonegap应用程序中添加滚动条

    我正在 PhoneGap 中为 Android 平台开发一个应用程序 在此应用程序中 不显示滚动条 如何在我的应用程序中显示滚动条 这是我的示例活动 它将显示滚动条 public class MyActivity extends Droid
  • 如何在 Laravel 中为 20 分钟后的每条新记录制定调度程序任务?

    我有一个停车系统 我使用 Angular 6 Laravel 作为后端 但我有一个具体问题 我不知道正确的方法 公园有两个图腾 它们向我的服务器发送一个条目 只有当客户从出口走出图腾并进入付款区时 我才会检查客户是否无效 这是我的代码 当他
  • python中日志文件名存储在哪里?

    我有一个由多个模块组成的 Python 程序 main 模块创建一个文件变量log file用于记录输出 所有其他模块也需要写入该文件 但是 我不想将 主 模块导入到其他模块中 因为这将是一个非常奇怪的依赖项 更不用说由于循环依赖它甚至可能
  • 在父级构造函数中设置窗口所有者时遇到问题

    在 WPF 中 在父窗口的构造函数中将窗口的 Owner 属性设置为其父窗口是否有任何问题 不应该有吧 那么为什么我会得到一个XamlParseException从下面的代码 public partial class MainView Wi
  • 如何使用 sqlalchemy 将初始数据加载到数据库中

    我希望能够在使用 SQLAlchemy 创建表时自动加载数据 在 django 中 你有fixtures https docs djangoproject com en dev howto initial data 它允许您在创建表时轻松地
  • 将 PDF 转换为 HTML,保持布局

    有哪些方法可以将 PDF 转换为 HTML 它可以是任何东西 在线服务 软件 图书馆 首选开源 在后一种情况下 首选 php 或 python 它必须保留原始布局 包括页码 脚注等 保留图像 可以将它们组合为每页一个背景图像 并保留链接 它
  • 使用 Javascript 管理 LinkBut​​ton?

    我有一个LinkButton在视图上称为 退出聊天 我嵌入javascript编码成OnClientClink javascript confirm Are you sure you want to end the session 但是 我
  • 使用引导推拉更改列顺序

    我有 3 列 按以下顺序排列 div class container fluid h1 Hello World h1 p Resize the browser window to see the effect p div class row
  • XCODE 不断崩溃。处理自动布局

    我点击关闭自动布局 现在我单击复选框将其打开 xcode 立即崩溃 每次 我很确定所有表格视图都有一个数据源 我无法从事该项目 请帮忙 Process Xcode 5748 Path Applications Xcode app Conte
  • 如何重命名 zip 存档中的文件而不解压并重新压缩它们?

    我需要将 zip 文件中的所有文件重命名为AAAAA filename txt to BBBBB filename txt 我想知道是否可以自动执行此任务 而无需提取所有文件 重命名 然后再次压缩 一次解压缩一个 重命名并再次压缩是可以接受