Команда резервного копирования scp с автоматической папкой не перезаписывает старые файлы при двойном выполнении

Независимо от того, как инициализируется стек, вы не видите нетронутый стек, потому что библиотека C выполняет ряд действий перед вызовом main, и они касаются стека.

В библиотеке GNU C на платформе x86 -64 выполнение начинается с точки входа_start , которая вызывает__libc_start_mainдля настройки, а последняя завершается вызовом main. Но перед вызовом mainон вызывает ряд других функций, что приводит к записи в стек различных фрагментов данных. Содержимое стека не очищается между вызовами функций, поэтому, когда вы попадаете в main, ваш стек содержит остатки от предыдущих вызовов функций.

Это объясняет только результаты, которые вы получаете из стека, см. другие ответы, касающиеся вашего общего подхода и предположений.

0
23.05.2020, 00:15
2 ответа

Вам нужно создать целевой каталог, чтобы самый верхний каталог исходного файла не участвовал в создании его для вас -. Побочный эффект -заключается в том, что сам каталог webdirбудет включен в дерево резервных копий -, если это является демонстрацией проблемы, рассмотрите возможность использования rsyncвместо этого

dst="/mnt/Webseite/Backups/$(date +"%Y-%m-%d")"
mkdir -p "$dst"
scp -rp abc@ssh.web1.rz.xyz.de: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"
0
18.03.2021, 23:33

Я сделал несколько тестов и понял, что мой предыдущий ответ был неверным. С тех пор я обнаружил, что на самом деле предпочтительнее, чтобы каталог не существовал в месте назначения. Ожидается, что папка окажется внутри DATE во второй раз, когда вы запустите команду, поскольку в первый раз копирование происходит так, как если бы исходный каталог был переименован (, поскольку пункт назначения не существует ). Второй раз он существует, и scp выясняет, что вы хотите клонировать каталог в существующий.

Решение вашей проблемы — сначала удалить его...

rm -rf /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")" #or move it if you want to keep the files
scp -rp abc@ssh.web1.rz.xyz.de:webdir /mnt/Webseite/Backups/"$(date +"%Y-%m-%d")"
0
18.03.2021, 23:33

Теги

Похожие вопросы