FTP를 통해 내 Box 계정에 Raspberry Pi 백업을 실행하기 위한 bash 스크립트를 만들려고 합니다. 대부분의 경우 작동하지만 어떤 이유로 변수를 해당 변수가 나타내는 텍스트로 변환하지 않습니다. 이 스크립트를 실행하면:
#!/bin/bash
FILENAME=backup-$(date +%Y-%m-%d).tar.gz
tar -czvf /tmp/$FILENAME /home/pi/
lftp -c 'open -e "set ftps:initial-prot ""; \
set ftp:ssl-force true; \
set ftp:ssl-protect-data true; \
put /tmp/$FILENAME; " \
-u "USERNAME", "PASSWORD" \
ftps://ftp.box.com:990/Automation/RPI/Backups
아카이브를 생성하고 정상적으로 서버에 연결하지만 다음 오류가 발생합니다.
put: /tmp/$FILENAME: No such file or directory
$FILENAME을 "backup-$(date +%Y-%m-%d).tar.gz"로 바꾸려고 했지만 여전히 반환됩니다.
put: /home/pi/+%Y-%m-%d).tar.gz: No such file or directory
"backup*.tar.gz"를 사용하면 비슷한 결과가 반환됩니다. 변수나 와일드카드 대신 특정 파일 이름을 사용하는 경우에만 작동하도록 할 수 있지만 백업을 자동화하기 위해 cron 작업을 설정하고 싶기 때문에 이 방법은 작동하지 않습니다.
그렇다면 이 문제를 해결하는 방법을 알고 있거나 더 나은 옵션이 있는 사람이 있습니까? 감사해요!
답변1
누구든지 같은 문제가 있는 경우를 대비해 제가 작성한 스크립트는 다음과 같습니다.
#!/bin/bash
FILENAME="backup-$(date +%Y-%m-%d).tar.gz"
echo $FILENAME
tar -czvf /tmp/$FILENAME /home/pi/
lftp << EOF
set ftps:initial-prot
set ftp:ssl-force true
set ftp:ssl-protect-data true
open -u "USERNAME","PASSWORD" ftps://ftp.box.com:990/Automation/RPI/Backups
put /tmp/$FILENAME
bye
EOF
rm /tmp/$FILENAME
답변2
두 가지 다른 질문을하고 있습니다. 역순으로:
더 나은 옵션은
rsync
FTP만큼 간단하지만 더 똑똑합니다. 나는 그것을 강력히 추천합니다.변수를 작은따옴표로 묶었기 때문에 변수가 확인되지 않습니다. 관찰하다:
$ foo=bar $ echo $foo bar $ echo '$foo' $foo $ echo "$foo" bar
명령을 다시 작성하여 큰따옴표로 묶으면 작업이 시작됩니다.