나는 크론에서 실행하는 것입니다 세 이상 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
나는 bash를 모르지만 'FOR' 루프가 "파일 경로가 7 일 이상 경과했다면 디 파일을 삭제했는지 여부에 관계없이'$ filepath has been deleted'라고 말하십시오. "어떤 종류의"if "블록이나 에코 피스를 제한하는 것을 추가 할 수 있습니다. – phroureo
@phroureo가 올바르게 제안하는 한 가지 방법은'-exec echo '{}' "가 삭제 된"\ "을 별도의 줄에 두지 않고'find '명령에 추가하는 것입니다. –
@phroureo, bash 코드는 개별적인 삭제가 성공했는지 알지 못합니다 - 그것은 모두 find에 내부적입니다. –