자동 폴더가 포함된 scp 백업 명령이 두 번 실행될 때 이전 파일을 덮어쓰지 않습니다.

자동 폴더가 포함된 scp 백업 명령이 두 번 실행될 때 이전 파일을 덮어쓰지 않습니다.

내 웹사이트에서 백업을 받고 싶습니다. 올바른 데이터가 포함된 디렉터리를 자동으로 생성하려면 다음 명령을 사용하고 있습니다.

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"

관련 정보