2017-09-19 3 views
1

나는 크론에서 실행하는 것입니다 세 이상 7 일 디렉토리에 매일 mysqldumps을 만들뿐만 아니라, 그 디렉토리에있는 모든 백업을 확인하고 제거하는 스크립트를 작성하는 것을 시도하고있다.삭제 된 파일 경로 만 인쇄하도록 에코를 가져 오는 방법은 무엇입니까?

그래서 내 기능이 제대로 작동, 내가가 원하는 일을하지 않습니다 단지 내 마지막 echo 명령입니다. 이것은 내가 지금까지 가지고있는 것입니다 :

DBNAME=database 
DATE=`date +\%Y-\%m-\%d_\%H\%M` 
SQLFILE=$DBNAME-${DATE}.sql 
curr_dir=$1 

#MAIN 
mysqldump -u root -ppassword --databases $DBNAME > $SQLFILE 

echo "$SQLFILE has been successfully created." 

#Remove files older than 7 days 

for filepath in "$curr_dir"* 
    do 
     find "$filepath" -mtime +7 -type f -delete 
     echo "$filepath has been deleted." 
    done 
exit 

따라서 백업 생성과 오래된 파일 제거가 모두 작동합니다. 그러나 내 문제는 echo "$filepath has been deleted."이 삭제 된 7 일보다 오래된 파일 대신 디렉터리의 모든 파일을 인쇄한다는 것입니다. 내가 여기서 어디로 잘못 가고 있니?

EDIT (전체 솔루션) :

이 답변과 의견에서 모든 사람의 조언을 사용하여 나를 위해 일하게 상처 전체 솔루션입니다. 이것은 cron 작업에서 작동합니다. 인수 $ 1에 지정된 경로 대신 루트 디렉토리에 파일이 작성 되었기 때문에 주 기능의 출력 파일 경로를 지정해야했습니다.

는 도움을 당신에게 모두 감사합니다! 는 IF 문은 $ 1 내가 파일에서 삭제하려는 지정된 디렉토리인지 여부를 확인

#Variables 
DBNAME=database 
DATE=`date +\%Y-\%m-\%d_\%H\%M` 
SQLFILE=$DBNAME-${DATE}.sql 
curr_dir=$1 

#MAIN 
mysqldump -u root -ppassword --databases $DBNAME > /path/to/db-backups/directory/$SQLFILE 

echo "$SQLFILE has been successfully created." 

#Remove files older than 7 days 

for filepath in "$curr_dir"* 
    do 
     if [[ $1 = "/path/to/db-backups/directory" ]]; then 
      find "$filepath" -mtime +7 -type f -delete -exec sh -c 'printf "%s has been deleted.\n" "[email protected]"' _ {} + 
     fi 
    done 
exit 
+2

나는 bash를 모르지만 'FOR' 루프가 "파일 경로가 7 일 이상 경과했다면 디 파일을 삭제했는지 여부에 관계없이'$ filepath has been deleted'라고 말하십시오. "어떤 종류의"if "블록이나 에코 피스를 제한하는 것을 추가 할 수 있습니다. – phroureo

+2

@phroureo가 올바르게 제안하는 한 가지 방법은'-exec echo '{}' "가 삭제 된"\ "을 별도의 줄에 두지 않고'find '명령에 추가하는 것입니다. –

+0

@phroureo, bash 코드는 개별적인 삭제가 성공했는지 알지 못합니다 - 그것은 모두 find에 내부적입니다. –

답변

2

당신은이 findecho을 병합 할 수 있습니다.

find "$filepath" -mtime +7 -type f -delete -exec echo '{}' "has been deleted." \; 

-delete 옵션은 단지입니다 -exec rm '{}' \;에 대한 바로 가기와 모든 -exec 명령은 지정한 순서대로 실행됩니다.

+1

'간부 쉬 -c '의 printf "% s 님이 삭제되었습니다. \ n" "$의 @"'_ {} +', 좀 더 효율적으로 가능한 가장 작은 수를 실행하는 외부 프로세스들 (한개의'/ bin/echo' 대 매치). –

+0

@MadP와 @Charles 감사합니다! 이것은 트릭을했다. –

관련 문제