2018. 4. 24. 15:36

쉘 스크립트에서,


한달된 로그파일들을 지워서 공간을 확보해 놓고 싶어서, 하나 만들었다.


su - test -c "rm -f /backup/db_backup_`date -d '1 month ago' +%Y%m`*.bak"


이렇게 하면, test 계정으로 들어가서, 

(현재 4월임)


3월달에 만들어진 파일들(rm -f /backup/db_backup_201803*.bak)을 삭제한다.



date 에서 가져오고 싶은 날짜 찾는거는 밑에 퍼온거를 참조해서 


아래와 같이 하면 된다.


날짜가 제대로 나오는지 확인해 보고 싶으면, echo로 아래와 같이 해보면 된다.


> echo `date -d '2 days ago' +%Y%m%d`



퍼온거

===========================================================================


과거


  1. date -d 'yesterday' # 어제
  2. date -d '1 day ago' # 1일전 = 어제
  3. date -d '2 day ago' # 2일전
  4. date -d '35 day ago' # 20일전
  5. date -d '1 week ago' # 1주일전
  6. date -d '2 month ago' # 1달전
  7. date -d '3 year ago' # 3년전
  8. date -d '10 second ago' # 10초전
  9. date -d '20 minute ago' # 20분전
  10. date -d '30 hour ago' # 30시간전
  11. date -d '3 year 7 month ago' # 3년 7개월전




미래 

* 과거에서 ago 를 빼면 됨

  1. date -d 'tomorrow' # 내일
  2. date -d '1 day' # 1일후 = 내일
  3. date -d '2 day' # 2일후
  4. date -d '35 day' # 20일후
  5. date -d '1 week' # 1주일후
  6. date -d '2 month' # 1달후
  7. date -d '3 year' # 3년후
  8. date -d '10 second' # 10초후
  9. date -d '20 minute' # 20분후
  10. date -d '30 hour' # 30시간후
  11. date -d '3 year 7 month' # 3년 7개월후



요일 기준


  1. date -d 'this friday' # 이번주 금요일
  2. date -d 'last monday' # 지난 월요일
  3. date -d 'next tuesday' # 다음 화요일



특정 시간을 기준으로 날짜 더하고 빼기


  1. date -d '2010-01-03 07:32:10 + 2 day 5 hours 17 minute'
  2. # 2010년 1월 3일 7시 32분 10초를 기준으로 2일 5시간 17분후



옵션 1


-d 는 --date 옵션으로 사용해도 됩니다. --date 로 쓸때에는 --date= 형식으로 사용하시면 됩니다.

  1. date --date='2 month'



옵션 2


시간단위를 나타내는 day, week, month, year, second, minute, hour 등은 뒤에 s(복수)를 붙여도 되고 안붙여도 됩니다.

  1. date -d '1 day ago'
  2. date -d '1 days ago'



옵션 3


시간을 원하는 형식으로 뽑기위해서는 아래같이 하시면 됩니다.

현재 시간으로부터 2일전의 년-월-일 시:분:초 형식으로 표시하려면

  1. date '+%Y-%m-%d %H:%M:%S' -d '2 day ago'



쉘스크립트에서 해당 시간을 변수에 담기


보통 위와 같은 date 함수는 주로 쉘스크립트에서 사용하게 됩니다. 리눅스 명령으로 가져온 결과값을 변수에 담으려면

  1. yesterday=$(date -d '1 day ago')


또는

  1. yesterday=`date -d '1 day ago'`


변수를 사용할때는

  1. echo $yesterday



자료출저 : http://steadypost.net/post/knowhow/id/8/


============================================================================


날짜별로 log파일 만들때 유용하다.

Posted by Tyson
2018. 2. 1. 12:12

폴더를 다른 폴더로 백업 받아 놓으려고 하는데, 폴더별로, 어느정도 작업이 되고 있는지 보고 싶은데,


이게 용량이 몇테라씩 하다보니까, 하나끝내고 하나 끝내는거 


보고 있기가 너무 빡세서, 


그냥 쉘 스크립트로 만들었다.


먼저 


test, test2, test3 폴더 3개를  test_copied 폴더로 복사할꺼다.


$> cp -rv --preserve=timestamps /volume1/shared/test/test /volume1/shared/test/test_copied


$> cp [옵션]  [원본위치]  [복사될위치]


-r 은 하위폴더 포함이고,

-v 는 보기 좋게 나오는거고,

--perserve=simestamps 는 원본에 있는 생성 시간은 유지하고 복사하는거다.



먼저 복사를 원하는데 가서,



$ vi test.sh


를 쳐서 에디터로 들어간다.


/volume1/shared/test/test폴더를  /volume1/shared/test/test_copied 폴더로 복사할것이다.


i를 눌러서 편집 입력 모드로 만들고,


아래처럼 쓴다.


cp -rv --preserve=timestamps /volume1/shared/test/test /volume1/shared/test/test_copied

echo "Finish test1" >> cp_log.txt

cp -rv --preserve=timestamps /volume1/shared/test/test2 /volume1/shared/test/test_copied

echo "Finish test2" >> cp_log.txt

cp -rv --preserve=timestamps /volume1/shared/test/test3 /volume1/shared/test/test_copied

echo "Finish test3" >> cp_log.txt





먼저 test폳더 복사후 cp_log.txt에 "Finish Test1"이란 로그를 남겨 놓는다.

그다음에 test2폴더를 복사후 로그를 남기고, test3도 마찮가지이다.


$> echo "Finish test1" >> cp_log.txt


여기에서 echo는 문자 출력이고, >>는 cp_log.txt파일에 추가하라는 이야기다.( '>' 두개임)


여기에서 > 를 한번만 쓰면, 이전꺼는 지우고, 마지막 문자만 들어간다.



작성후, 'ESC'를 눌르고,   :wq 를 입력후 나온다.


그다음에 copy.sh를 실행하는 방법은 아래 3가지 방법이 있다.


$ ./copy.sh


$ sh copy.sh


$ bash copy.sh

난 개인적으로 ./copy.sh로 실행을 했다.


실행을 하면 권한이 없다는 말이 나올것이다.


그러면 아래와 같이 권한을 준다.


$ chmod 700 copy.sh

를 친다.



그다음에 다시



$ ./copy.sh

를 실행한다.


백그라운드로 작업하고 싶으면, 


$ ./copy.sh &

백그라운드 관련 포스터  http://tyson.tistory.com/88



하면 실행될 것이고 끝나면,


$ cat cp_log.txt

를 하면 어디까지 복사 됬는지 볼 수 있다.

Posted by Tyson