Копирование только более новых файлов

На мой взгляд, это плохая практика - пытаться монтировать резервную файловую систему при запуске, потому что если что-то пойдет не так (rm -rf / [enter] ops), данные на резервной копии, вероятно, будут удалены вместе с ней.

Поэтому, если вы используете для этого скрипт, монтируйте внутри скрипта или в cron, а после завершения монтируйте.

После этого ваш запуск больше не будет зависать, и файловая система будет работать.

Но есть и другое решение - удалить ее из fstab, и поместить как команду mount в rc.local с символом "&", чтобы запустить ее в фоновом режиме:

mount /dev/mapper/cr_backup /backup -t ext4&

Для съемных устройств есть решение autofs: https://linuxconfig.org/automatically-mount-usb-external-drive-with-autofs

3
21.03.2017, 01:38
3 ответа

Make

Здесь мы генерируем Makefile динамически с помощью heredoc и запускаем динамический Makefile для выполнения copy

cat - <<\CODE | make -f - SRCDIR="/home/imp/imp/msgs" XN="BRD MIX"
.PHONY: all
all: $(foreach i,$(foreach j,$(XN),$(wildcard $(SRCDIR)/*.$j)),$(addprefix $(join $(dir $i),bak/),$(notdir $i)))
cprule = $(SRCDIR)/bak/%.$1: $(SRCDIR)/%.$1; /bin/cp -p "$$^" "$$@"
$(foreach i,$(XN),$(eval $(call cprule,$i)))
CODE

Bash

SRCDIR="/home/imp/imp/msgs"
for src in "$SRCDIR"/*.MIX "$SRCDIR"/*.BRD
do
   dest=${src%/*}/bak/${src##*/}
   if [ ! -e "$dest" ] || [ "$src" -nt "$dest" ]
   then
      /bin/cp -p "$src" "$dest"
   fi
done
1
27.01.2020, 21:11

Вам необходимо использовать cp -p для сохранения временных меток. В противном случае вы не сможете с пользой сравнить их в следующий раз.

cp -pu /home/imp/imp/msgs/*.MIX /home/imp/imp/msgs/bak/
cp -pu /home/imp/imp/msgs/*.BRD /home/imp/imp/msgs/bak/
3
27.01.2020, 21:11

Вы можете использовать rsync с шаблоном *.MIX и *.BRD, например

rsync -avm --include='*.MIX' --include='*.BRD' --exclude='*' /home/imp/imp/msgs/ /home/imp/imp/msgs/bak/
4
27.01.2020, 21:11

Теги

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