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
相关产品推荐
相关产品推荐

