Независимо от того, как инициализируется стек, вы не видите нетронутый стек, потому что библиотека C выполняет ряд действий перед вызовом main
, и они касаются стека.
В библиотеке GNU C на платформе x86 -64 выполнение начинается с точки входа_start , которая вызывает__libc_start_main
для настройки, а последняя завершается вызовом main
. Но перед вызовом main
он вызывает ряд других функций, что приводит к записи в стек различных фрагментов данных. Содержимое стека не очищается между вызовами функций, поэтому, когда вы попадаете в main
, ваш стек содержит остатки от предыдущих вызовов функций.
Это объясняет только результаты, которые вы получаете из стека, см. другие ответы, касающиеся вашего общего подхода и предположений.
Вам нужно создать целевой каталог, чтобы самый верхний каталог исходного файла не участвовал в создании его для вас -. Побочный эффект -заключается в том, что сам каталог 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"
Я сделал несколько тестов и понял, что мой предыдущий ответ был неверным. С тех пор я обнаружил, что на самом деле предпочтительнее, чтобы каталог не существовал в месте назначения. Ожидается, что папка окажется внутри 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")"