2012-09-01 2 views
3

내 우분투 서버가 내 백업을 관리하는 데 도움이되는 간단한 스크립트를 만들고 있습니다. 내 로컬 컴퓨터에서 x 시간마다 내 문서를 압축하고 내 백업 컴퓨터로 scp를 넘깁니다. 내 백업 디렉토리에 남아있을 수있는 최대량의 백업을 원합니다. 최대량의 백업에 도달하면 이전 백업을 삭제하는 스크립트를 작성 중입니다. 이것은 내가 지금까지 가지고있는 것이며, 스크립트를 실행할 때 MAX_backups라는 파일을 생성합니다. 이 파일을 만드는 이유는 무엇입니까? 나는 프로그래밍과 관련하여 경험이 많지 않지만 도움이된다면 크게 도움이 될 것입니다. 감사.예기치 않은 파일을 만드는 Bash 스크립트

#!/bin/bash 

backup_count=$(ls ~/backup | wc -w) 

MAX_backups='750' 

extra_count=$((backup_count - MAX_backups)) 

if [ backup_count > MAX_backups ] 
then 
     for ((i=0; i <= extra_count; i++)) 
     do 
       file=$(ls ~/backup -t -r -1 | head --lines 1) 
       rm ~/backup/"$file" 
     done 
fi 

답변

7
if [ backup_count > MAX_backups ] 

> 는 파일 재 해석되고있다. 다음 중 하나를 시도하십시오 :

# ((...)) is best for arithmetic comparisons. It is parsed specially by the shell and so a 
# raw `>` is fine, unlike within `[ ... ]` which does not get special parsing. 
if ((backup_count > MAX_backups)) 

# [[ ... ]] is a smarter, fancier improvement over single brackets. The arithmetic operator 
# is `-gt`, not `>`. 
if [[ $backup_count -gt $MAX_backups ]] 

# [ ... ] is the oldest, though most portable, syntax. Avoid it in new bash scripts as you 
# have to worry about properly quoting variables, among other annoyances. 
if [ "$backup_count" -gt "$MAX_backups" ] 
+0

그건 완벽합니다! 도와 주셔서 정말 감사합니다. – Kyle

0

파일이 만들어진 이유는 확실하지 않지만 'test'(if 문에서 대괄호 연산자) 버전이이 파일을 생성한다고 가정합니다. 내가 생각 는 비교 편집

if [ $backup_count -gt $MAX_backups ] 

변경해야합니다 : 물론! 파일 리디렉션을 놓친 이유는 파일이 만들어지는 이유입니다.

관련 문제