Kode di bawah ini hanya menghapus file pertama yang didapat di dalam dir web. Saya ingin menghapus semua file dan folder di dalam direktori web dan menyimpan direktori web. Bagaimana saya bisa melakukan itu?
- name: remove web dir contents
file: path='/home/mydata/web/{{ item }}' state=absent
with_fileglob:
- /home/mydata/web/*
Catatan: Saya sudah mencoba rm -rf
menggunakan perintah dan shell, tetapi tidak berfungsi. Mungkin saya salah menggunakannya.
Bantuan apa pun di arah yang benar akan dihargai.
Saya menggunakan 2.1.0.0 yang memungkinkan
Jawaban:
Kode di bawah ini akan menghapus seluruh konten
artifact_path
Catatan : ini juga akan menghapus direktori.
sumber
rm -rf /
momen hebat dalam sejarahwhen: artifact_path is defined and artifact_path != ""
Menggunakan modul shell ( idempoten juga):
Solusi terbersih jika Anda tidak peduli tentang tanggal pembuatan dan pemilik / izin:
sumber
shell
untukcommand
dan berfungsiHapus direktori (pada dasarnya salinan https://stackoverflow.com/a/38201611/1695680 ), mungkin melakukan operasi ini dengan di
rmtree
bawah tenda.Jika Anda tidak memiliki kemewahan untuk menghapus seluruh direktori dan membuatnya kembali, Anda dapat memindai file, (dan direktori), dan menghapusnya satu per satu. Yang akan memakan waktu cukup lama. Anda mungkin ingin memastikan bahwa Anda telah
[ssh_connection]\npipelining = True
mengaktifkan an.cfg di.sumber
state=empty
Saya benar-benar tidak suka solusi rm, juga memungkinkan memberi Anda peringatan tentang penggunaan rm. Jadi di sini adalah bagaimana melakukannya tanpa perlu rm dan tanpa peringatan yang memungkinkan.
sumber: http://www.mydailytutorials.com/ansible-delete-multiple-files-directories-ansible/
sumber
coba perintah di bawah ini, itu harus bekerja
sumber
with_items: "{{ contents.stdout_lines }}"
ls
keluaran 'untuk mendapatkan nama file karena tidak benar mencetak nama file dengan karakter khusus seperti baris baru.Menciptakan implementasi keseluruhan yang direhaul dan gagal-aman dari semua komentar dan saran:
sumber
register
untukplugin_dir_deleted
, kan?owner: dir_to_delete.stat.pw_name, group: dir_to_delete.stat.gr_name mode: dir_to_delete.stat.mode
tetapi gagal pada saya dengan versi Ansible saya saat ini :(Menggunakan file glob juga akan berfungsi. Ada beberapa kesalahan sintaksis dalam kode yang Anda posting. Saya telah memodifikasi dan menguji ini harus bekerja.
sumber
with_fileglob
hanya bekerja pada mesin lokal, bukan yang jauh; bukankah itu benarSementara Ansible masih berdebat untuk menerapkan
state = empty
https://github.com/ansible/ansible-modules-core/issues/902Namun perlu dicatat, dengan sinkronisasi Anda tetap dapat menyinkronkan file Anda (dengan menghapus) dengan benar.
sumber
Itulah yang saya kemukakan:
Pertama, kita mendapatkan daftar direktori
find
, pengaturanfile_type
untukany
, jadi kami tidak akan melewatkan direktori dan tautan yang bersaranghidden
untukyes
, jadi kami tidak melewatkan file tersembunyirecurse
keyes
, karena tidak hanya tidak perlu, tetapi dapat menambah waktu eksekusi.Kemudian, kita melihat daftar itu dengan
file
modul. Outputnya sedikit bertele-tele, jadiloop_control.label
akan membantu kami membatasi output (temukan saran ini di sini ).Tetapi saya menemukan solusi sebelumnya agak lambat, karena iterates melalui konten, jadi saya pergi dengan:
stat
Itu sudah cukup bagi saya, tetapi Anda dapat menambahkan
attributes
juga, jika Anda mau.sumber
Ada masalah terbuka sehubungan dengan ini.
Untuk saat ini, solusinya berfungsi untuk saya: buat folder kosong secara lokal dan sinkronkan dengan yang jauh.
Berikut ini adalah contoh buku pedoman:
sumber
Saya telah menulis modul yang memungkinkan kustom untuk membersihkan file berdasarkan beberapa filter seperti usia, timestamp, pola glob, dll.
Ini juga kompatibel dengan versi lama yang mungkin. Itu dapat ditemukan di sini .
Berikut ini sebuah contoh:
sumber
Saya ingin memastikan bahwa perintah find hanya menghapus semua yang ada di dalam direktori dan membiarkan direktori tetap utuh karena dalam kasus saya direktori tersebut adalah sistem file. Sistem akan menghasilkan kesalahan ketika mencoba menghapus sistem file tetapi itu bukan pilihan yang bagus. Saya menggunakan opsi shell karena itu adalah satu-satunya opsi yang saya temukan sejauh ini untuk pertanyaan ini.
Apa yang saya lakukan:
Edit file host untuk dimasukkan ke dalam beberapa variabel:
Dan buat buku pedoman:
Ini akan menghapus semua file dan direktori di direktori variabel / sistem file COGNOS_HOME. Opsi "-mindepth 1" memastikan bahwa direktori saat ini tidak akan disentuh.
sumber
Hanya sedikit salin bersih & tempel templat jawaban ThorSummoners, jika Anda menggunakan Ansible> = 2.3 (perbedaan antara file dan direktori tidak diperlukan lagi.)
sumber
Dengan asumsi Anda selalu berada di Linux, coba
find
cmd.Ini harus menghapus file / folder / tersembunyi di bawah
/home/mydata/web
sumber
sumber
Ini adalah contoh saya.
mulai rsyslog
sumber
Di bawah ini bekerja untuk saya,
sumber