You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:编写Bash脚本将子文件夹内容打包为独立7z归档

实现与Batch等效的Bash打包脚本

问题场景

当前目录下存在多个子文件夹(如Aburner、Btoads、gigawing),每个文件夹内包含若干文件。现有一段可正常运行的Batch代码:

for /d %%d in (*.*) do 7z a "%%d.7z" ".\%%d\*"

这段代码的作用是:将每个子文件夹内的文件打包为与文件夹同名的7z归档,且归档内仅包含文件(不含原文件夹层级)。

但尝试的Bash脚本存在问题:要么把所有内容打包到一个归档,要么归档内会保留子文件夹层级(即结构为「文件夹名/文件」,而非直接存放文件),需要实现功能完全等效的Bash脚本。

解决方案

方法一:用7z排除参数实现

for dir in */; do
    dir_name="${dir%/}"
    7z a -r "$dir_name.7z" "$dir"/* -xr!"$dir"
done

说明:

  • for dir in */:遍历当前目录下所有子文件夹(遍历结果末尾带/)
  • dir_name="${dir%/}":移除文件夹路径末尾的/,得到纯文件夹名称
  • 7z命令参数:
    • -a:执行添加文件到归档的操作
    • -r:递归处理子目录(如果目标文件夹内还有嵌套子目录也能一并打包)
    • "$dir"/*:指定要打包的是目标文件夹下的所有内容
    • -xr!"$dir":排除目标文件夹本身,确保归档内不会保留原文件夹层级,直接存放文件

方法二:进入子目录后打包

for dir in */; do
    dir_name="${dir%/}"
    (cd "$dir" && 7z a "../$dir_name.7z" ./*)
done

说明:

  • 先进入目标子文件夹,再将当前目录下的所有文件打包到上级目录的同名7z文件中
  • 这种方式天然避免了归档内出现原文件夹层级,因为打包的是当前目录(子文件夹内部)的内容

内容的提问来源于stack exchange,提问作者Wolf_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:08:10