이런 스크립트를 짜고 싶은데 도저히 이걸 어떻게 스크립트로 옮겨야 할지 감이 잡히지 않습니다.
구상중인 스크립트의 목적은 3일 정도에 한번씩
/data/data/com.kakao.talk/databases/KakaoTalk.db
/data/data/jp.naver.line.android/databases/naver_line
/data/data/kr.co.tictocplus/databases/tictocplus.db
/data/data/com.android.providers.telephony/databases/mmssms.db
/data/data/com.android.providers.contacts/databases/contacts2.db
/data/data/com.android.providers.calendar/databases/calendar.db
부팅과 함께 이 파일들을 sdcard의 특정 폴더에 날짜를 이름으로 하는 하위디렉토리를 만들어 복사하되
약 10회분의 복사본만 유지하는 것입니다.
그러니까 /sdcard/gomdol_backup/에 2013-06-06 디렉토리를 만들어서 그 아래 저 파일들을 집어넣고
3일 지나면 2013-06-09를 만들어서 집어넣고... 이 디렉토리들이 10개를 넘어가면 오래된 것부터 지우려는거죠.
첫번째 문제는 '3일 정도에 한번씩' 을 어떻게 하느냐입니다.
단말기는 어차피 하루에 몇번, 아니면 며칠에 한번씩 재부팅되는데 그 간격이 일정치 않으므로 부팅 카운터를 쓸 수는 없습니다.
그래서 부팅시에
/data/gomdol_daycount 라는 파일을 하나 만들어서 여기에 백업을 한 일시를 unix time을 사용해 기록해 두었다가
다음 부팅시에 이 값과 현재의 unix time의 차이를 구해서 3일이 지나면 저 위의 파일들을 백업하고 싶은데...
일단 gomdol_daycount 파일이 없으면 백업이 한번도 안 이루어진것일테니 무조건 백업 하고
gomdol_daycount를 새로 만들어서 저장해야겠지요. 그러려면 date +%s > /data/gomdol_daycount 하면 될거 같고...
그러다가 다음 부팅에서 현재의 unix time을 변수로 잡으려면
GL_CURRENT=`data +%s`
GL_LAST=`cat /data/gomdol_daycount`
해서 GL_CURRENT에서 GL_LAST를 뺀 값이 일정 이상(그러니까 3일분의 unix time 차등분)이 되게 하면 될것같은데
바로 이 단계에서 구체적인 방법이 떠오르지 않습니다.
아ㅠㅠ
두번째 문제는 10회분의 복사본을 유지하고 오래된 것부터 지워나가는 것입니다.
저 /sdcard/gomdol_backup 내에서 항목을 카운트하려면 어떻게 해야하는지
그리고 카운트된 것 중에서 가장 숫자가 작은것을 어떻게 검출해야하는지가
전혀 떠오르지않아요... 굉장히 기초적인것같은데 (...)
어허엉 힌트라도 좀 주시면 고맙겠습니다.
●?Who's Celes
-
?
우리 StartPDA 서버의 백업 스크립트를 보여주마
이렇게 하면 3일치만 무한반복으로 백업이 되는거지.
#!/bin/sh
fulldate=`%Y-%m-%d`
dd=`date +%d`
d=`expr $dd % 3`
echo Starting Daily Backup $fulldate. >> /var/log/bkday
echo start mysqldump... >> /var/log/bkday
mysqldump -uzbxe -pwpfhqhem zbxe > /startpda/backup/db/daily/startpda-$d.sql
echo end mysqldump... >> /var/log/bkday
echo start tar www-files... >> /var/log/bkday
nohup tar zcvf /startpda/backup/docs/daily/startpda-$d.tgz --exclude /var/www/startpda/zbxe/files/attach/binaries/622566 /var/www/startpda > /var/log/bkdaytar
echo end tar www-files... >> /var/log/bkday
echo End Daily Backup $fulldate. >> /var/log/bkday
-
어제 이렇게 한번 해봤는데 어떤가요?일단 동작자체는 하는 것 같은데 어딘가 개선할 점이 분명히 있을 것 같아요...#!/system/bin/shsetprop gomdolight.auto.backup skipped#get current exec time, last exec timeGL_TIME_CURRENT=`date +%s`GL_TIME_LAST=`cat /data/gomdol_daycount`#calculate time differenceGL_TIME_DIFF=`expr $GL_TIME_CURRENT - $GL_TIME_LAST`#check if sdcard is inserted - should be flagged by install-recovery.sh[ ! -e /data/gomdolight_external_sdcard_inserted ] && GL_BACKUP_PATH=/storage/sdcard0/Backup/`date +%Y%m%d`[ -e /data/gomdolight_external_sdcard_inserted ] && GL_BACKUP_PATH=/storage/sdcard1/Backup/`date +%Y%m%d`#backup intervalGL_BACKUP_INTERVAL=259200#perform automatic backup of critical dataif [ -e /data/gomdol_daycount ]; thenif [ $GL_TIME_DIFF -gt $GL_BACKUP_INTERVAL ]; thensetprop gomdolight.auto.backup performed_regular/system/gomdolconfig/busybox mkdir -p $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/com.kakao.talk/databases/KakaoTalk.db $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/jp.naver.line.android/databases/naver_line $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/kr.co.tictocplus/databases/tictocplus.db $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/com.android.providers.telephony/databases/mmssms.db $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/com.android.providers.contacts/databases/contacts2.db $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/com.android.providers.calendar/databases/calendar.db $GL_BACKUP_PATHdate +%s > /data/gomdol_daycountelsesetprop gomdolight.auto.backup skipped_recent_enoughfielsesetprop gomdolight.auto.backup performed_firsttime/system/gomdolconfig/busybox mkdir -p $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/com.kakao.talk/databases/KakaoTalk.db $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/jp.naver.line.android/databases/naver_line $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/kr.co.tictocplus/databases/tictocplus.db $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/com.android.providers.telephony/databases/mmssms.db $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/com.android.providers.contacts/databases/contacts2.db $GL_BACKUP_PATH/system/gomdolconfig/busybox cp /data/data/com.android.providers.calendar/databases/calendar.db $GL_BACKUP_PATHdate +%s > /data/gomdol_daycountfi;#delete old backup[ ! -e /data/gomdolight_external_sdcard_inserted ] && cd /storage/sdcard0/Backup/[ -e /data/gomdolight_external_sdcard_inserted ] && cd /storage/sdcard1/Backup//system/gomdolconfig/busybox ls -1t --color=never | /system/gomdolconfig/busybox sed -e '1,10d' | /system/gomdolconfig/busybox xargs /system/gomdolconfig/busybox rm -rf
스마트폰 관련 질문과 답
질문은 상세하게, 답은 자상하게 ^^
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
http://stackoverflow.com/questions/2960022/shell-script-to-count-files-then-remove-oldest-files
일단 이게 유력해 보이긴 하는데...