2017-05-09 68 views
2

我有一個命令可以生成一些日誌,我想要一個簡單的解決方案來生成數字序列,以避免覆蓋現有的文件。如何避免通過在ansible後面加上數字來覆蓋文件?

  • 拳頭執行節約out.log
  • 第二執行應該創建out2.log
  • 第三屆執行應該創建out3.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]