2015-08-21 14 views

cevap

0

vardır ama çalışıyorsanız bunu kullanabilirsiniz Sadece dosyaları olan şeyleri kaldırdığınızdan emin olmak için. Çalışmalı ama onu düzeltmeniz gerekebilir.

find . -name files1* -type f -exec basename {} \; | xargs rm 
+0

Ben ansible kullanıyorum (BT düzenleme aracı). Uzak ana bilgisayarda belirli şeyleri yapmak için modüller sağlarlar. Bu modüllerden biri dosya modülüdür. http://docs.ansible.com/ansible/file_module.html. Bir dosyayı kaldırmak için bu modülü nasıl kullanırsınız. Bunu kullanmak istiyorum çünkü gerçek bir linux komutundan ziyade idempotent. Daha önce bunu kaldıracak bir linux komutum var -> rm name * – user301693

20

düzenleme: 2,0 yanıtlayıcı 'şimdi loop over fileglobs da, önceki cevabı çalışması gerekir böylece, şimdi serbest ve olmuştur. Eğer yerel olarak yanıtlayıcı 'çalıştırıyorsanız bu sadece işleri Not:

- file: 
    path: "{{item}}" 
    state: absent 
    with_fileglob: 
    - /tmp/test/file* 

orijinal cevap: Eğer kabuk düşmesi miyim Ancak şu anda kabuğuna düşürmeden bunu yapmanın bir yolu bulamıyor

Modelle eşleşen dosyaların listesini toplamak ve sonra

yanıtlayıcı '2.0 sizin için liste alacağı bir "Bul" modülünü with_items ile dosya modülü üzerinde döngü içerecektir olabilir, bir değişken olarak o kaydetmek için: http://docs.ansible.com/ansible/find_module.html

Burada yetenekli 2.0'da yapması gereken bir kaç görev var, ancak onu yüklemedim, bu yüzden test etmedim ve bulma modülünün sonuçlarına yanlış erişiyor olabilirim. yukarıda gösterildiği gibi

- find: 
    paths: "/tmp/test" 
    patterns: "file*" 
    register: result 

- file: 
    path: "{{item.path}}" #correction code 
    state: absent 
    with_items: result.files 
+0

Cool .. teşekkürler. Sadece resmi olarak serbest bırakılması için 2.0 beklemeniz gerekiyor ve sonra onu kullanacağım. – user301693

+2

İkinci çözüm işe yarıyor, ancak ilk (dosyagözlü) yanlıştır, çünkü fileglobs yalnızca yerel dosya sisteminde çalışmaktadır. Daha fazla bilgi için https://github.com/ansible/ansible/issues/10115 adresine bakın. – karlos

+0

Haklısınız Karlos. Bunu belirtmek için cevabımı güncelledim. – smiller171

0

sen bulmak + dosya modülünü kullanabilirsiniz, ancak yanıtlayıcı '< 2.0 üzerinde bu hata var:

ERROR: find is not a legal parameter in an Ansible task or handler 

Aşağıdaki komut yapın (eğer birlikte -regex değiştirebilir olacak - Ben tek bir görev yapar yeni fileglob döngü içerecek şekilde benim cevap güncelledik

- name: delete files 
    shell: 'find /tmp/test/ -maxdepth 1 -type f -regex "/tmp/test/file1.*" -exec rm -rf {} \;' 
0
- hosts: srv-lnx 
    gather_facts: no 

    tasks: 
    - shell: "find /var/tmp/collect -maxdepth 1 -type f | awk -F/ '{print $NF}'" 
     register: result 

    - debug: var=result 

    - fetch: src=/var/tmp/collect/{{ item }} dest=/appl/collect/data flat=yes 
     with_items: result.stdout_lines 
İlgili konular