2017-02-16 15 views
4

本質的に、私はLinuxで "ワイルドカードファイル名"を扱うことができるようにしたいと考えています。本質的に、これは、lsコマンドをファイル名の一部に続けて "*"を使用して特定のファイルのみを一覧表示することを意味します。コマンド出力をアレイに格納する方法は?

しかし、複数のファイル名が返される可能性があるため、出力を適切に変数に格納することはできません。したがって、私は1つのタスクの間に配列内に何が存在しても、これらの結果を格納できるようにしたい。私はその後、後のタスクで配列からすべての結果を取得できるようにしたいと考えています。さらに、返されるファイルの数がわからないので、ファイル名ごとにタスクを実行することができず、配列が理にかなっています。

これは、ランダムに格納された場所に頻繁に変更されるファイルが存在し、常に同じ前半を持つためです。それは無作為である彼らの名前の後半であり、私はそれを完全に難しいものにする必要はありません。

アレイを適切に実装/操作する方法がわからないので、次のコードは私が達成しようとしているものの例です。複数のファイル名が、私はこのトピックの援助を求めていた理由である、返送された場合に明らかに意図した通りに機能しません。

- hosts: <randomservername> 
    remote_user: remoteguy 
    become: yes 
    become_method: sudo 
    vars: 
    aaaa: b 
    tasks: 

- name: Copy over all random file contents from directory on control node to target clients. This is to show how to manipulate wildcard filenames. 
    copy: 
     src: /opt/home/remoteguy/copyable-files/testdir/ 
     dest: /tmp/ 
     owner: remoteguy 
     mode: u=rwx,g=r,o=r 
    ignore_errors: yes 

    - name: Determine the current filenames and store in variable for later use, obviously for this exercise we know part of the filenames. 
    shell: "ls {{item}}" 
    changed_when: false 
    register: annoying 
    with_items: [/tmp/this-name-is-annoying*, /tmp/this-name-is-also*] 

    - name: Run command to cat each file and then capture that output. 
    shell: cat {{ annoying }} 
    register: annoying_words 

    - debug: msg=Here is the output of the two files. {{annoying_words.stdout_lines }} 

    - name: Now, remove the wildcard files from each server to clean up. 
    file: 
     path: '{{ item }}' 
     state: absent 
    with_items: 
    - "{{ annoying.stdout }}" 

私はYAMLフォーマットは少しアップmussedしまっ理解し、それが固定されたかどうこれは普通に動作しますが、私が探している出力は得られません。したがって、50個のファイルがあれば、それらをすべて操作したり、すべて削除することなどができるようにしたいと考えています。

もし誰でも私が正しく利用する方法を教えてもらえたら上記のテストコード断片の配列は素晴らしいでしょう!

+0

あなたの質問がたかだか5行に短縮されるようです。私は問題を説明し、あなたの特定の事件以上に関連する最小の例を使用することをお勧めします。 – techraf

+0

techraf:私は少し言い方をすることができますが、このケースでは、より多くの情報が少ないよりも優れていると思いました。将来、私はこのタイプのテキストの爆発を少し下げることができるかどうかを調べるつもりです。 – Viscosity

答えて

4

実行可能モジュールは、shellcommandアクションモジュールの出力をstdoutstdout_lines変数に格納します。後者は、標準出力の別々の行をリスト形式で含んでいます。

は、要素を反復処理するために使用します。

with_items: 
    - "{{ annoying.stdout_lines }}" 

あなたはls出力を解析すると、いくつかのケースで問題を引き起こす可能性があることを覚えておいてください。

+0

Welp。stdout_linesがリスト形式で別々の行を利用していることを知ってうれしいです。しかし、私の3番目のプレイ/タスクでは、私がそれをあなたが提案する方法で実行すると、実行中に失敗します。 stdoutが存在する2番目の/ play/taskの間に私が不可能なplaybook -vvvの間に見ることができても、dict値/ argが定義されていないと主張しています。多分、3番目のプレイ/タスクのシェルステートメントの置換に問題がありますか? – Viscosity

関連する問題