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

Linux下递归复制多目录为符号链接并排除指定目录的实现方法

故障原因

你之前的命令报错主要有两个原因:

  1. 未开启bash的extglob扩展,!(/app/dirs/dir3)排除语法无法被正确识别
  2. 源路径混用相对/绝对路径,导致子目录下的文件生成软链接时路径计算错误,指向不存在的位置

解决方案1:cp+extglob(贴合原有写法)

  • 切换到源根目录
    cd /app/dirs
    
  • 开启extglob扩展模式
    shopt -s extglob
    
  • 执行符号链接创建,使用绝对路径保证链接指向正确
    cp -as "$PWD"/!(dir3) ./dir3/
    

参数说明:-a 递归归档保留所有文件属性,-s 生成符号链接而非复制文件内容,$PWD 取当前目录绝对路径,保证生成的软链接为绝对路径不会失效


解决方案2:find命令(兼容性更好,无需修改shell配置)

不需要开启extglob,一行命令直接执行:

find /app/dirs -maxdepth 1 -type d ! -path /app/dirs ! -name dir3 -exec cp -as {} /app/dirs/dir3/ \;

参数说明:find仅匹配/app/dirs下的一级子目录,排除根目录自身和dir3后,逐个传给cp执行符号链接创建


结果验证

执行完成后执行ls -lR /app/dirs/dir3即可查看目录结构,所有子目录和内部文件都会正确指向源路径的对应文件,不会出现嵌套复制或路径失效问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:06:02