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

Linux终端如何遍历b开头目录并压缩其最后一个子目录?

修正后的完整shell脚本
#!/bin/bash
# 遍历所有b开头的一级目录
for f in ./b*/;
do
  # 筛选目录、排序后取最后一个子目录
  LASTFOLDER=$(ls -d "$f"*/ | sort | tail -n 1 | xargs basename)
  # 按要求生成压缩包存到对应父目录
  tar zcvf "$f/${LASTFOLDER}.tar.gz" -C "$f" "$LASTFOLDER"
done
补全逻辑说明
  • 先修正原脚本的基础语法问题:shell变量赋值时等号两侧不能有空格,执行命令获取返回值需要用$()包裹
  • 子目录筛选:用ls -d */只匹配目录类型的条目,排除目录下的普通文件,避免误判
  • 排序取最后:通过sort按系统默认字典序排序后,用tail -n 1取排序最后的条目,再用basename去掉路径前缀和末尾的斜杠,得到纯子目录名
  • tar命令优化:加-C参数切换到父目录再执行压缩,避免压缩包内部生成冗余的层级路径
注意事项

当前排序逻辑适配示例中的字母+数字组合的字典序排序规则,如果子目录有特殊命名规则,可调整sort的参数适配需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:15:05