Скопируйте всю папку из источника в место назначения и удалите лишние файлы или папку из места назначения

Поведение, которое вы видите, обусловлено установленными вами приоритетами. Установка выпуска по умолчанию с помощью Default-Releaseили -tустанавливает приоритет 990 для соответствующих версий; ваш приоритет 1001 для нестабильной версии всегда лучше этого.

Подробнее см. man apt_preferences.

0
13.07.2017, 00:27
2 ответа
#!/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 после пробного прогона.

2
28.01.2020, 02:16

Это классический вариант использования rsync. rsyncскопирует дерево каталогов из источника в место назначения. Также может быть предложено удалить лишние другие файлы после копирования:

rsync -a -v --delete-after /var/www/html/test/ /var/www/html/test2  

Обратите внимание на окончание /в исходной спецификации. Если вы опустите это, он скопирует сам исходный каталог, что вам не нужно.

Если вы хотите, чтобы было тихо, удалите -v. Если файлы большие и сжимаемые, вы можете попробовать добавить -z, чтобы заставить его выполнять сжатие и распаковку, но я сомневаюсь, что это принесет много пользы. Опция --delete-afterудаляет только лишние файлы и папки из места назначения, но только после после остальных файлов.

Преимущество использования rsyncзаключается в том, что не нужно копировать файлы, которые совпадают с (, то есть уже существуют, и которые действительно соответствуют ).

7
28.01.2020, 02:16

Теги

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