2017-05-09 8 views
2

몇 가지 로그를 생성하는 명령이 있고 기존 파일을 덮어 쓰지 않도록 일련의 숫자를 생성하는 간단한 솔루션이 필요합니다.안전한 번호로 숫자를 접미어로 덮어 쓰지 않으려면 어떻게해야합니까?

  • 주먹 실행 out.log
  • 2 실행 등 out3.log을 만들어야합니다 out2.log
  • 3 실행을 만들 ...해야하고 저장합니다.

현재 변수 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]