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

Ansible遍历文件名创建符号链接:如何让目标仅保留文件名?

解决Ansible符号链接目标路径仅使用文件名的问题

没问题,这个需求很好实现,咱们只需要用Ansible自带的basename过滤器,从源文件的完整路径里提取出文件名,再拼到目标目录后面就可以了。

修改后的PlayBook配置

- hosts: DEVSRV
  become: yes
  tasks:
    - name: symlink deploy_config scripts
      file:
        src: "{{ item }}"
        dest: "/usr/local/bin/{{ item | basename }}"
        state: link
      loop:
        - "/home/foo/bar/deploy/config/dev_deploy_config.sh"
        - "/home/foo/bar/deploy/config/int_deploy_config.sh"
        - "/home/foo/bar/deploy/config/prod_deploy_config.sh"

关键解释

  • {{ item | basename }}这个过滤器会自动截取item变量里完整路径的最后一段(也就是文件名),比如对于/home/foo/bar/deploy/config/dev_deploy_config.sh,它会提取出dev_deploy_config.sh。
  • 这样dest就会变成/usr/local/bin/dev_deploy_config.sh,完美实现“仅使用文件名”的需求,而且每个循环项都会自动对应正确的目标文件名。

顺便提一句:如果/usr/local/bin/目录已经存在,其实你原来的写法(dest写目录路径)也会自动在目录下创建同名的符号链接,但用basename的写法更明确,也更灵活——比如哪天你想把目标文件名改成别的(比如去掉_deploy_config.sh后缀),直接在过滤器后面加字符串处理就行啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 13:02:44