2017-10-02 5 views
0

데이터베이스를 백업하기 위해 cron과 함께 사용할 작은 bash 스크립트를 작성하고 있습니다. 이전 백업 (180 일 이상)을 검색하면 find 명령이이를 삭제해야합니다.-delete를 사용하여 find 명령은 항상 상태 코드 0을 반환합니다.

그것은 삭제하지만 않습니다 두 (첫 번째 발생해야 그것은 수행하고 삭제하는 것이없는 경우, 그것은 아무것도 삭제하지 않은 경우에도 항상 0을 반환 0

#!/bin/bash 

# Vars 
TODAY=$(date +%d%m%y) 
BDIR=/backup/ 
FLOG="/var/log/mydb_backup.log" 

# Backing up the db 
su -c "pg_dump --format=c --file=${BDIR}mydb_db_backup.${TODAY} mydb" postgres 
if [ $? -eq 0 ]; then 
    LOG="mydb DB of ${TODAY} backed up!" 
else 
    LOG="Problem to back up mydb DB of ${TODAY}" 
fi 


# Delete db backup older than 180+ days 
find ${BDIR} -type f -mtime +180 -delete 
if [ $? -eq 0 ]; then 
    LOG+=" - Old DB backup deleted" 
else 
    LOG+=" - No Old DB backup to delete" 
fi 

# Writing result 
echo ${LOG} >> ${FLOG} 

echo $?을 반환 할 때 개월 만). 내가 잘못하고있는 것이 있습니까?

+0

교차 사이트 중복 : https://serverfault.com/questions/225798/can-i-make-find-return-non-0-when-no-matching-files-are-found –

+0

삭제하지 않기 때문입니다. 아무것도 오류가 아닙니다. 'find '는 삭제 된 파일의 수를 반환하지 않고 실행 중에 발생한 오류를 설명하는 상태 코드를 반환합니다. 오류없이 실행 했으므로 예상대로 0을 반환했습니다. – litelite

+0

참 .. 나는 그것이 삭제에 관한 것이 아니라 발견한다는 것을 완전히 잊어 버렸습니다. 고마워요! 나는 그것을 어떻게 든 고칠 것이다;) – Nihvel

답변

1

좋아이 ..이 순간 내가 생각할 수있는 가장 좋은 방법입니다 : 내가 파일에 결과 (들)을 인쇄

# Delete db backup older than 180+ days 
find ${BDIR} -maxdepth 1 -type f -mtime +180 -printf "%f\n" > $FDEL 
if [[ $? -eq 0 && $(wc -l <"$FDEL") -gt 0 ]]; then 
    cd $BDIR 
    xargs -d '\n' -a $FDEL rm 
    LOG+=" - Old DB backup deleted" 
else 
    LOG+=" - No Old DB backup to delete" 
fi 
rm $FDEL 

, 나는 백업 폴더로 이동 한 후, 각 파일을 삭제 목록에서 찾았습니다. 생성 된 파일은 0 바이트보다 커야합니다. 즉, 파일이 비어 있지 않으므로 안에있는 파일을 삭제해야합니다.