2017-05-09 16 views
2

私はいくつかのログを生成するコマンドを持っています。既存のファイルの上書きを避けるために、一連の数値を生成する簡単なソリューションが必要です。ファイルのオーバーライドを避けるにはどうすればいいですか?

  • 拳実行がようにout3.logを作成...とすべきであるout.log
  • 第二の実行がout2.log
  • 第三の実行を作成する必要があります保存されます。

現在、私は変数output_file=out.logを持っていますので、必要に応じて(ディスク上に既に存在するファイル)、接尾辞を追加するタスクが必要です。

理想的には、可能な限り最小限の数の作業を使用して実装する必要があります。

+0

YYYYMMDD-HHMMSSは機能しますか? – Matt

+1

あなたは「*簡単な解決策を望んでいますか?」あなたはfreelancer.comではないのでこれを投稿したかったのですか? – techraf

+0

@techrafはSOがこのような一般的なコーディングの問題に最適な解を得るための最良の場所であるからです。誰も解決策を投稿しても心配しないでください。自分で質問に答えます。そして、いいえ、日付スタンプは受け入れられませんが、誰かがbashでそれをやりたいのであれば、いつでもgets_next_filenameという単一のタスクを使うことができるので、私は受け入れられるでしょう。私の現在の実装は長すぎるので、自分自身を恥ずかしくしたくありません。 – sorin

答えて

1

私の現在のソリューションは、そのサイズのために好きではありません。他の誰かがよりクリーンなものを見つけたら、私は彼らのことを受け入れることを喜んでします。

これは、test_output_fileがデフォルトのファイル名であることを前提としています。

- name: get next value of test_output_file to avoid overwrites 
    shell: | 
     path=$(dirname "{{ test_output_file }}") 
     filename=$(basename "{{ test_output_file }}") 
     extension="${filename##*.}" 
     filename="${filename%.*}" 
     if [[ -e $path/$filename.$extension ]] ; then 
      i=2 
      while [[ -e $path/$filename-$i.$extension ]] ; do 
       let i++ 
      done 
      filename=$filename-$i 
     fi 
     echo $path/$filename.$extension 
    register: result 
    changed_when: False 

- name: increments test_output_file if needed 
    set_fact: 
     test_output_file: "{{ result.stdout_lines[0] }}" 
    when: test_output_file != result.stdout_lines[0] 
関連する問題