GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo obtener varios archivos de una máquina remota a una local con Ansible

Solución 1:

Debe usar el módulo de sincronización para hacer esto. Esto utiliza el increíble poder de rsync. Copiará estructuras de archivos y directorios de cualquier profundidad, es a prueba de balas y altamente eficiente, solo copia los bytes reales que han cambiado:

- name: Fetch stuff from the remote and save to local
  synchronize:  src={{ item }} dest=/tmp/ mode=pull
  with_items:
    - "folder/one"
    - "folder/two"

La clave es el mode parámetro:

Especifique la dirección de la sincronización. En el modo push, el localhost o delegado es la fuente; En el modo pull, el host remoto en contexto es la fuente.

Solución 2:

Probablemente necesitará registrar contenido remoto y luego recorrerlo, algo como esto debería funcionar:

- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
  register: files_to_copy

- fetch: src=/remote/{{ item }} dest=/local/
  with_items: "{{ files_to_copy.stdout_lines }}"

donde /remote debe cambiarse con la ruta del directorio en su servidor remoto y /local/ con directorio en tu maestro

Solución 3:

No tengo suficiente representante para comentar, de lo contrario lo agregaría.

Usé lo que publicó Kęstutis. Tuve que hacer una pequeña modificación

- shell: (cd /remote; find . -maxdepth 1 -type f) | cut -d'/' -f2
  register: files_to_copy

- fetch: src=/remote/{{ item }} dest=/local/
  with_items: "{{ files_to_copy.stdout_lines }}"

with_items era el área que tenía que cambiar. de lo contrario, no podría localizar los archivos.

Solución 4:

Arreglando el ejemplo anterior

- hosts: srv-test
  tasks:
    - find: paths="/var/tmp/collect" recurse=no patterns="*.tar"
      register: files_to_copy
    - fetch: src={{ item.path }} dest=/tmp
      with_items: "{{ files_to_copy.files }}"

Solución 5:

bueno, si está utilizando la última versión de ansible, como 2.9.9, creo que necesitamos comillas para el elemento

- name: use find to get the files list which you want to copy/fetch
  find: 
    paths: /etc/
    patterns: ".*passwd$"
    use_regex: True   
  register: file_2_fetch

- name: use fetch to get the files
  fetch:
    src: "{{ item.path }}"
    dest: /tmp/
    flat: yes
  with_items: "{{ file_2_fetch.files }}"

Linux
  1. Cómo cifrar archivos de almacenamiento en la nube con Rclone

  2. Cómo enviar datos al portapapeles local desde una sesión SSH remota

  3. ¿Cómo cambiar el nombre de varios archivos de una extensión a otra en Linux/Unix?

  4. ¿Cómo volver a scp a local cuando ya he ingresado a la máquina remota?

  5. ¿Cómo usar rsync desde una PC con Windows a un servidor Linux remoto?

Linux:Cómo compartir archivos en una red local con guau

Cómo compartir archivos de forma segura desde la línea de comandos con ffsend en Linux

Cómo descargar archivos desde servidores Linux remotos

Cómo clonar un repositorio Git con Ansible

Cómo transferir archivos en Linux con SCP y Rsync

¿Cómo puedo copiar archivos de un servidor de computación en la nube de Google a mi máquina local?