当前位置: 首页 > article >正文

Linux shell zip 命令实现不切换当前终端的工作目录打包另一个路径下的文件和文件夹

如图,我想在当前目录 ~/Bypasser 下打包 src 文件夹,使得生成的 zip 压缩包中具有 src 文件夹下的所有文件夹、所有文件夹中的所有子项目、所有文件,保留层次结构但压缩包中最外面不包含 src 这一层。执行命令时,不要改变当前终端的工作目录。

目录结构

问了下 GPT,给了几个错误答案,都无法实现。

错误示范一:这个命令虽然保留了层次结构,但最外面有一层 src

zip -r "${zipFilePath}" "src"

错误示范二:以为这样就解决了?这个命令虽然保留了层次结构,但最外面依然有一层 src

zip -r "${zipFilePath}" "src/*"

错误示范三:虽然最外面那层 src 无了,但目录结构不见了,如果 src 中不存在文件夹,这个命令倒是可以满足要求,但图片中 src 下还有好几层文件夹。

zip -r -j "${zipFilePath}" "src"

一个可能但不是最优的思路:用一个变量保存当前工作目录,利用 cd src/ 命令 cd 过去,然后执行 zip -r "${zipFilePath}" *",再 cd 回来。

正确命令:

(cd "${srcFolderPath}" && zip -r -v - *) > "${zipFilePath}"

大概思路是,利用 () 进行代码的执行,就可以不用在当前的终端进行 cd,从而避免了更改当前终端的工作目录。如果 cd 成功,那就用 zip -r -v 命令进行递归和验证处理,紧接着的一个 - 可以将打包的内容用重定向输出到目标路径中。

综合了下自己的其他需求(抛弃注释信息和转换 LF),这个是我最后使用的命令。

(cd "${srcFolderPath}" && zip -J -ll -r -v - *) > "${zipFilePath}"

http://www.kler.cn/a/510001.html

相关文章:

  • 周末总结(2024/01/18)
  • JEL分类号
  • MySQL、HBase、ES的特点和区别
  • 计算机网络 (41)文件传送协议
  • 分频器code
  • 在Linux上如何让ollama在GPU上运行模型
  • TCP 重传演进:TCP RACK Timer 能替代 RTO 吗
  • 【触想智能】工业电脑一体机在数控机床设备上应用的注意事项以及工业电脑日常维护知识分享
  • 《汽车与驾驶维修》是什么级别的期刊?是正规期刊吗?能评职称吗?
  • 使用 Java 和 FreeMarker 实现自动生成供货清单,动态生成 Word 文档,简化文档处理流程。
  • Vue.js组件开发全解析
  • Excel中函数SIGN()的用法
  • Reactive StreamsReactor Core
  • ES elasticsearch安装(8.17)
  • spring-cloud-starter-gateway 使用中 KafkaAppender的问题
  • C# OpenCV机器视觉:特征匹配 “灵魂伴侣”
  • Vue.js组件开发-实现输入框与筛选逻辑
  • Nginx反向代理架构介绍
  • RabbitMQ-消息可靠性以及延迟消息
  • Python虚拟环境使用的全方位指南
  • 抖音ip属地不准是什么原因?可以改吗
  • Python Numba多流和共享内存CUDA优化技术学习记录
  • eBay账号安全攻略:巧妙应对风险
  • python如何设计矩阵
  • RPA编程实践:Electron简介
  • 国产化中间件东方通TongWeb环境安装部署(图文详解)