내 웹사이트에서 백업을 받고 싶습니다. 올바른 데이터가 포함된 디렉터리를 자동으로 생성하려면 다음 명령을 사용하고 있습니다.
scp -rp [email protected]:webdir/ /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")"
이것은 매우 잘 작동합니다. 그러나 같은 날 동일한 명령을 두 번째로 실행하면 "webdir" 디렉터리가 날짜 폴더에 복사됩니다.
첫 번째 실행:
/mnt/Website/Backups/2020-05-22/"files"
두 번째 실행:
/mnt/Website/Backups/2020-05-22/"files"
/mnt/Website/Backups/2020-05-22/webdir/"files"
하지만 같은 날의 "오래된" 백업을 덮어쓰고 싶습니다. 이렇게 하면 하루에 한 번만 백업할 수 있습니다.
내가 여기서 뭘 잘못하고 있는 걸까? 이 문제는 쉽게 해결할 수 있을 것 같습니다. Google에서는 도움을 드릴 수 없습니다.
답변1
몇 가지 테스트를 해보니 이전 답변이 잘못된 것으로 나타났습니다. 나중에 디렉토리가 대상에 존재하지 않는 것이 실제로 가장 좋다는 것을 알았습니다. 두 번째로 명령을 실행하면 해당 폴더는 DATE 폴더에 있을 것으로 예상됩니다. 처음 복사할 때 소스 디렉터리의 이름이 변경된 것과 같기 때문입니다(대상이 존재하지 않기 때문). 두 번째로 존재하면 scp는 해당 디렉터리를 기존 디렉터리에 복제하려고 한다는 것을 알아냅니다.
문제에 대한 해결책은 먼저 제거하는 것입니다.
rm -rf /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")" #or move it if you want to keep the files
scp -rp [email protected]:webdir /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")"
답변2
소스의 최상위 디렉터리가 선택되지 않도록 대상 디렉터리를 생성해야 합니다. 부작용은 webdir
디렉터리 자체가 백업 트리에 포함된다는 것입니다. 이것이 문제의 핵심이라면 다음을 rsync
사용하는 것을 고려하십시오.
dst="/mnt/Webseite/Backups/$(date +"%Y-%m-%d")"
mkdir -p "$dst"
scp -rp [email protected]:webdir/ "$dst"
이 예를 통해 이를 확인할 수 있습니다.
# Set up the scenario on the remote source
mkdir -p /tmp/src/webdir
touch /tmp/src/webdir/{a,b,c}
# Copy the first time, and review the results
dst="/tmp/dst/webseite/backups/$(date +"%Y-%m-%d")"
mkdir -p "$dst"
scp -rp remotehost:/tmp/src/webdir/ "$dst"
find "$dst" | sort
/tmp/dst/webseite/backups/2020-05-23
/tmp/dst/webseite/backups/2020-05-23/webdir
/tmp/dst/webseite/backups/2020-05-23/webdir/a
/tmp/dst/webseite/backups/2020-05-23/webdir/b
/tmp/dst/webseite/backups/2020-05-23/webdir/c
# Change some files
touch /tmp/src/webdir/{d,e}
# Copy the second time, and review the results
scp -rp remotehost:/tmp/src/webdir/ "$dst"
find "$dst" | sort
/tmp/dst/webseite/backups/2020-05-23
/tmp/dst/webseite/backups/2020-05-23/webdir
/tmp/dst/webseite/backups/2020-05-23/webdir/a
/tmp/dst/webseite/backups/2020-05-23/webdir/b
/tmp/dst/webseite/backups/2020-05-23/webdir/c
/tmp/dst/webseite/backups/2020-05-23/webdir/d
/tmp/dst/webseite/backups/2020-05-23/webdir/e
website
마지막으로 백업(대상) 디렉터리 트리에 포함되지 않으려면 rsync
다음을 대신 사용하세요.
rsync -a remotehost:/tmp/src/webdir/ "$dst"