Поведение, которое вы видите, обусловлено установленными вами приоритетами. Установка выпуска по умолчанию с помощью Default-Release
или -t
устанавливает приоритет 990 для соответствующих версий; ваш приоритет 1001 для нестабильной версии всегда лучше этого.
Подробнее см. man apt_preferences
.
#!/bin/bash
SOURCE="/var/www/html/test/"
DESTINATION="/var/www/html/test2/"
cp -pRu "$SOURCE*" "$DESTINATION"
HITSDIR=`find $DESTINATION -type d | sed -e 's|'$DESTINATION'\(.*\)|\1|g'`
for i in $HITSDIR; do
if [ -e $SOURCE$i ]; then
echo Yes $SOURCE$i exists
else
echo Nope delete $DESTINATION$i.
#rm -r $DESTINATION$i
fi
done
HITSFILES=`find $DESTINATION -type f | sed -e 's|'$DESTINATION'\(.*\)|\1|g'`
for i in $HITSFILES; do
if [ -e $SOURCE$i ]; then
echo Yes $SOURCE$i exists
else
echo Nope delete $DESTINATION$i.
#rm $DESTINATION$i
fi
done
Это должно делать то, что вы хотите, просто раскомментируйте rm после пробного прогона.
Это классический вариант использования rsync
. rsync
скопирует дерево каталогов из источника в место назначения. Также может быть предложено удалить лишние другие файлы после копирования:
rsync -a -v --delete-after /var/www/html/test/ /var/www/html/test2
Обратите внимание на окончание /
в исходной спецификации. Если вы опустите это, он скопирует сам исходный каталог, что вам не нужно.
Если вы хотите, чтобы было тихо, удалите -v
. Если файлы большие и сжимаемые, вы можете попробовать добавить -z
, чтобы заставить его выполнять сжатие и распаковку, но я сомневаюсь, что это принесет много пользы. Опция --delete-after
удаляет только лишние файлы и папки из места назначения, но только после после остальных файлов.
Преимущество использования rsync
заключается в том, что не нужно копировать файлы, которые совпадают с (, то есть уже существуют, и которые действительно соответствуют ).