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

如何使用tar命令排除子目录仅打包根目录文件并输出到指定路径

解决方案

可行命令

方案1(推荐,兼容性强)

结合find筛选深度为1的文件后传给tar打包,逻辑清晰不会出错:

# 通用模板
find <目标目录路径> -maxdepth 1 -type f -exec tar -cvf <输出tar包完整路径> {} +

针对你的目录场景,要打包~/root-dir下根目录文件、输出到~/r.tar的命令为:
find ~/root-dir -maxdepth 1 -type f -exec tar -cvf ~/r.tar {} +
参数说明:

  • -maxdepth 1 限制查找范围仅为目标目录的第一层,不进入任何子目录
  • -type f 仅匹配普通文件,自动过滤掉子目录项
  • exec {} + 将所有筛选出的文件路径批量传给tar进行打包

方案2(纯tar实现)

不需要借助其他命令,直接用tar的排除规则实现:

# 通用模板
tar -cvf <输出tar包完整路径> -C <目标目录的上级目录> --exclude='*/' <目标目录名>/*

对应你的场景命令为:
tar -cvf ~/r.tar -C ~ --exclude='*/' root-dir/*
参数说明:

  • -C ~ 先切换工作目录到root-dir的上级目录(即用户家目录),避免打包后的文件带不必要的绝对路径前缀
  • --exclude='*/' 匹配所有带层级路径的子目录项,全部排除,仅保留根目录下的普通文件

原命令失效原因

你之前的写法是硬编码指定要排除的子目录名称,一方面[subdir, ... ]属于字符匹配规则,不符合tar的通配符匹配逻辑,无法生效;另一方面如果子目录名称不固定、数量多,这种写法也无法覆盖所有要排除的子目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:04