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

Linux下使用find匹配NE开头子目录并分别单独压缩为tar.gz的方法

错误原因分析

你原来的命令不符合预期主要有两个核心问题:

  • 命令中的NE*.tar.gz会在find执行前被shell提前展开通配符:如果当前目录不存在匹配的NE前缀tar.gz文件,会直接把NE*.tar.gz作为固定文件名,所有匹配到的目录都会被打包进同一个文件;如果已有匹配的文件,会直接用展开后的第一个文件名作为打包目标,完全达不到每个目录单独打包的要求。
  • 没有对每个匹配到的目录做动态的文件名映射,无法生成和目录名一一对应的tar.gz包。
正确命令写法

基础版(打包结果带目录相对路径)

find . \( -iname 'NE*' -type d \) -exec sh -c 'tar -czvf "${1##*/}.tar.gz" "$1"' sh {} \;

优化版(打包结果仅保留纯目录名,解压直接生成对应NE目录)

find . \( -iname 'NE*' -type d \) -exec sh -c 'dir_name=${1##*/}; tar -czvf "${dir_name}.tar.gz" -C . "${dir_name}"' sh {} \;
参数说明
  • 用sh -c包裹打包逻辑,避免shell提前解析通配符,实现动态生成打包文件名
  • ${1##*/}是shell参数替换语法,会自动去掉匹配到的目录路径前缀(比如把./NE1处理为NE1),用来生成和目录名对应的打包文件名
  • 末尾的sh是给sh -c的$0占位,避免第一个匹配到的目录被误当做$0参数消耗
  • -C .参数会让tar在打包时切换到当前目录,不会把./前缀打进压缩包,解压体验更好

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:27:03