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

如何用Salt脚本在Minion本地批量复制动态文件至目标目录

解决SaltStack批量复制动态文件到目标目录的问题

需求与问题

需要在Minion本地将/app/downloaded/下的所有动态文件(文件名、数量不固定)复制到已存在的/app/myapp/installables/目录,要求保留目标目录原有文件,不能删除或覆盖整个目录。

使用以下Salt状态配置后,执行结果提示目标目录已存在,不会被覆盖:

Copy_new_version_files_for_installation:
  file.copy:
    - name: /app/myapp/installables
    - source: /app/downloaded
    - recurse: True

执行输出:

ID: Copy_new_version_files_for_installation
    Function: file.copy
        Name: /app/myapp/installables
      Result: True
     Comment: The target file "/app/myapp/installables" exists and will not be overwritten

解决方案

方法一:调整file.copy参数实现文件复制

原配置试图将整个源目录复制到目标目录,但目标目录已存在,Salt默认不会覆盖整个目录。只需添加include_pat匹配所有文件,并通过force参数控制是否覆盖同名文件:

Copy_new_version_files_for_installation:
  file.copy:
    - name: /app/myapp/installables
    - source: /app/downloaded
    - recurse: True
    - include_pat: '.*'  # 匹配所有文件,等效于cp命令的*.*
    - makedirs: True
    - force: True  # 允许覆盖目标目录中同名文件,无需覆盖可删除此参数

方法二:使用file.recurse模块(更适配批量同步场景)

file.recurse专门用于递归同步目录内容,默认保留目标目录原有文件,仅处理源目录的文件:

Copy_new_version_files_for_installation:
  file.recurse:
    - name: /app/myapp/installables
    - source: file:///app/downloaded  # 本地文件需用file://协议指定绝对路径
    - include_pat: '.*'
    - makedirs: True

参数说明

  • include_pat: '.*':正则匹配所有文件,和cp /app/downloaded/*.*效果一致,若需匹配特定后缀,可改为'.*\.txt'这类正则。
  • force: True:开启后会覆盖目标目录中已存在的同名文件;若要保留旧版本文件,删除此参数即可,Salt会自动跳过已存在的文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:11:06