如何在远程系统上使用Ansible模块移动/重命名文件/目录?我不想使用命令/shell任务,也不想将文件从本地系统复制到远程系统。
当前回答
你可以通过
使用Ad Hoc命令
ansible all -m command -a" mv /path/to/foo /path/to/bar"
或者你,如果你想用剧本的话
- name: Move File foo to destination bar
command: mv /path/to/foo /path/to/bar
其他回答
- name: Example
hosts: localhost
become: yes
tasks:
- name: checking if a file exists
stat:
path: "/projects/challenge/simplefile.txt"
register: file_data
- name: move the file if file exists
copy:
src: /projects/challenge/simplefile.txt
dest: /home/user/test
when: file_data.stat.exists
- name: report a missing file
debug:
msg: "the file or directory doesn't exist"
when: not file_data.stat.exists
另一个对我来说很有效的选项是使用同步模块。然后使用file模块删除原始目录。
下面是文档中的一个例子:
- synchronize:
src: /first/absolute/path
dest: /second/absolute/path
archive: yes
delegate_to: "{{ inventory_hostname }}"
这是我让它为我工作的方式:
Tasks:
- name: checking if the file 1 exists
stat:
path: /path/to/foo abc.xts
register: stat_result
- name: moving file 1
command: mv /path/to/foo abc.xts /tmp
when: stat_result.stat.exists == True
上面的剧本,会检查是否文件abc。在将文件移动到TMP文件夹之前,XTS已经存在。
从2.0版本开始,在复制模块中可以使用remote_src参数。
如果为True,它将转到src的远程/目标机器。
- name: Copy files from foo to bar
copy: remote_src=True src=/path/to/foo dest=/path/to/bar
如果你想移动文件,你需要用文件模块删除旧文件
- name: Remove old files foo
file: path=/path/to/foo state=absent
从2.8版开始复制模块remote_src支持递归复制。
Bruce并没有试图统计目的地以检查是否移动已经在那里的文件;在尝试mv之前,他正在确保要移动的文件实际存在。
如果你像汤姆一样,只在文件不存在的情况下才移动,我认为我们仍然应该将布鲁斯的支票整合到混合中:
- name: stat foo
stat: path=/path/to/foo
register: foo_stat
- name: Move foo to bar
command: creates="path/to/bar" mv /path/to/foo /path/to/bar
when: foo_stat.stat.exists
推荐文章
- 不能与文件列表一起使用forEach
- python方式检查文件是否存在?
- BAT文件执行后保持CMD打开
- 从包含文件名的路径获取不包含文件名的完整路径
- Git:从另一个分支复制目录中的所有文件
- PHP,获取没有文件扩展名的文件名
- 如何在远程系统上使用Ansible任务移动/重命名文件
- 从java.io.File获取java.nio.file.Path对象
- 用c#编写数据到CSV文件
- 安卓系统;检查文件是否存在而不创建新的文件
- 如何改变。net WebClient对象的超时时间
- 我如何可以删除在VIM所有文本从当前行文件结束?
- 如何比较二进制文件,以检查他们是否相同?
- 如何使用open with语句打开文件
- Xcode:在项目构建中出现“文件xxx.png从工作副本中丢失”的问题