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

使用cp命令复制目录时如何排除所有名为outdir的文件夹(无rsync权限)

复制目录并排除所有层级outdir文件夹的实现方案

适用场景

集群环境禁用rsync,仅可使用cp、find等基础系统命令的场景

可直接使用的命令

如果你不需要保留原目录结构中的空目录,直接执行以下命令即可:

find . -type d -name "outdir" -prune -o -type f -exec cp --parents -v {} ../target-directory/ \;

如果你需要保留所有非outdir的空目录,先执行目录创建命令,再执行文件复制命令:

# 第一步:在目标目录下创建所有非outdir的目录结构
find . -type d -name "outdir" -prune -o -type d -exec mkdir -p ../target-directory/{} \;
# 第二步:复制所有非outdir目录下的文件
find . -type d -name "outdir" -prune -o -type f -exec cp --parents -v {} ../target-directory/ \;

参数详细解释

find命令部分参数

  • find .:从当前执行命令的目录开始,递归遍历所有子内容
  • -type d -name "outdir" -prune:匹配所有名称为outdir的目录,-prune参数作用是裁剪搜索路径,找到outdir目录后直接跳过该目录及其所有下级内容,不再进入搜索,完美实现全层级排除outdir的需求
  • -o:逻辑或运算符,代表只有不满足前面排除条件的内容,才会执行后面的操作
  • -type f:筛选出排除outdir后剩下的普通文件,如果需要保留软链接等其他类型的文件,可删除该参数
  • -exec 命令 \;:对每一个筛选出来的对象执行指定命令,结尾的\;是-exec参数的固定结束标记,反斜杠为转义符,避免被bash提前解析
  • {}:find命令的占位符,执行时会自动替换为每个筛选到的文件/目录的相对路径

cp命令部分参数

  • --parents:自动保留源文件的相对目录结构,例如筛选到的文件路径为./demo/sub1/file.txt,复制时会自动在目标目录下创建demo/sub1/层级,再将文件放入对应路径,完全保留原有目录结构
  • -v:打印复制过程的详细日志,不需要可删除
  • -p(可选):如果需要保留文件的权限、修改时间等元数据,可以在cp参数中加上-p即可

原有命令失效原因说明

  1. cp -r -v ./!(outdir) ../target-directory/使用的是bash的扩展通配符语法,该通配符仅匹配当前目录层级的内容,不会递归处理子目录内的对象,因此只能排除顶层的outdir,子目录中的outdir不会被匹配到,会被正常复制
  2. cp -r ./*/!(outdir) ../target-directory/匹配的是一级子目录下的非outdir对象,cp会直接将这些对象复制到目标目录的根路径下,因此会丢失原有的多层级结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 18:06:04