Приведенный ниже код удаляет только первый файл, который он получает внутри веб-каталога. Я хочу удалить все файлы и папки внутри веб-каталога и сохранить веб-каталог. Как я могу это сделать?
- name: remove web dir contents
file: path='/home/mydata/web/{{ item }}' state=absent
with_fileglob:
- /home/mydata/web/*
Примечание: я пытался rm -rf
использовать команду и оболочку, но они не работают. Возможно, я использую их неправильно.
Любая помощь в правильном направлении будет оценена.
Я использую ansible 2.1.0.0
Ответы:
Ниже код удалит все содержимое
artifact_path
Примечание : это также удалит каталог.
источник
rm -rf /
моментов в историиwhen: artifact_path is defined and artifact_path != ""
Используя модуль оболочки ( тоже идемпотент ):
Самое чистое решение, если вам не нужны дата создания и владелец / разрешения:
источник
shell
наcommand
и она работаетУдалите каталог (в основном это копия https://stackoverflow.com/a/38201611/1695680 ), Ansible выполняет эту операцию
rmtree
под капотом.Если у вас нет возможности удалить весь каталог и создать его заново, вы можете отсканировать его на наличие файлов (и каталогов) и удалить их один за другим. Что займет некоторое время. Вы, вероятно, хотите убедиться, что
[ssh_connection]\npipelining = True
в вашем ansible.cfg есть.источник
state=empty
Мне действительно не понравилось решение rm, также ansible дает вам предупреждения об использовании rm. Итак, вот как это сделать без необходимости использования rm и без предупреждений.
источник: http://www.mydailytutorials.com/ansible-delete-multiple-files-directories-ansible/
источник
попробуйте команду ниже, она должна работать
источник
with_items: "{{ contents.stdout_lines }}"
ls
'output' для получения имен файлов, потому что он неправильно печатает имена файлов со специальными символами, такими как перевод строки.Создана общая перестроенная и отказоустойчивая реализация из всех комментариев и предложений:
источник
register
поplugin_dir_deleted
, верно?owner: dir_to_delete.stat.pw_name, group: dir_to_delete.stat.gr_name mode: dir_to_delete.stat.mode
но у меня неИспользование файлового глобуса также будет работать. В опубликованном вами коде есть синтаксическая ошибка. Я изменил и проверил это должно работать.
источник
with_fileglob
работает только на локальной машине, а не на удаленной; не правда ли?Пока Ansible все еще обсуждает вопрос реализации
state = empty
https://github.com/ansible/ansible-modules-core/issues/902Обратите внимание, что с синхронизацией вы все равно должны иметь возможность правильно синхронизировать ваши файлы (с удалением).
источник
Вот что я придумала:
Во-первых, мы получаем список каталогов с
find
настройкойfile_type
чтобыany
, таким образом , мы бы не пропустить вложенные каталоги и ссылкиhidden
вyes
, таким образом , мы не пропустить скрытые файлыrecurse
вyes
, так как это не только не нужно, но может увеличить время выполнения.Затем мы проходим этот список с помощью
file
модуля. Его вывод немного многословен, поэтомуloop_control.label
поможет нам с ограничением вывода (наш совет был здесь ).Но я обнаружил, что предыдущее решение было несколько медленным, поскольку оно перебирает содержимое, поэтому я пошел с:
stat
Этого было достаточно для меня, но вы также можете добавить
attributes
, если хотите.источник
Существует вопрос открыт связи с этим .
Пока решение работает для меня: создайте пустую папку локально и синхронизируйте ее с удаленной.
Вот пример игры:
источник
Я написал специальный модуль ANSI для очистки файлов на основе нескольких фильтров, таких как возраст, отметка времени, шаблоны глобусов и т. Д.
Он также совместим с более старыми версиями. Это можно найти здесь .
Вот пример:
источник
Я хочу убедиться, что команда find только удаляет все внутри каталога и оставляет каталог нетронутым, потому что в моем случае каталог является файловой системой. Система будет выдавать ошибку при попытке удалить файловую систему, но это не очень хорошая опция. Я использую опцию оболочки, потому что это единственная рабочая опция, которую я нашел до сих пор для этого вопроса.
Что я сделал:
Отредактируйте файл hosts, добавив некоторые переменные:
И создайте пьесу:
Это удалит все файлы и каталоги в каталоге переменных / файловой системе COGNOS_HOME. Опция -mindepth 1 гарантирует, что текущий каталог не будет затронут.
источник
Если вы используете Ansible> = 2.3, просто маленький шаблон для копирования и вставки из ThorSummoners (различие между файлами и директориями больше не требуется).
источник
Предполагая, что вы всегда в Linux, попробуйте
find
cmd.Это должно уничтожить файлы / папки / скрытые под
/home/mydata/web
источник
источник
Это мой пример.
начать rsyslog
источник
Ниже работал для меня,
источник