Использовать размер папки в условном выражении - PullRequest
0 голосов
/ 25 января 2020

Я хочу удалить папку, только если размер больше определенного размера. К сожалению, я не могу достичь желаемого результата с помощью модуля stat.

Попытка:

---
- hosts: pluto
  tasks:
    - stat:
        path: /home/ik/.thunderbird
      register: folder
    - name: Remove .thunderbird folder on host if folder size > 100MiB
      file:
        path: /home/ik/.thunderbird
        state: absent
      when: folder.stat.size > 100000000

Ошибка:

fatal: [pluto]: FAILED! => {"msg": "The conditional check 'folder.size > 100000000' failed. The error was: error while evaluating conditional (folder.size > 100000000): 'dict object' has no attribute 'size'\n\nThe error appears to be in '/home/ik/Playbooks/susesetup.yml': line 12, column 7, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n      register: folder\n    - name: Remove .thunderbird folder on host if folder size > 100MiB\n      ^ here\n"}

Как решить эту проблему

1 Ответ

1 голос
/ 25 января 2020

Атрибут size, возвращаемый модулем stat для папки, не сообщает вам размер содержимого папки! Он только сообщает размер записи каталога, который может зависеть от ряда факторов, таких как количество файлов, содержащихся в каталоге.

Если вы хотите рассчитать объем данных, содержащихся в папке вам нужно будет запустить du или подобную команду. Следующее получает размер папки в 1024 блоках:

---
- hosts: localhost
  gather_facts: false
  tasks:
    - command: du -sk /path/to/some/directory
      register: folder_size_raw

    - set_fact:
        folder_size: "{{ folder_size_raw.stdout.split()[0] }}"

    - debug:
        msg: "{{ folder_size }}"
...