Копировать каталог рекурсивно, только если в целевом объекте файл существует и только если он новее целевого объекта

Копировать каталог рекурсивно, только если в целевом объекте файл существует и только если он новее целевого объекта

Как можно скопировать файл и/или каталог, только если в целевом объекте файл существует и только если он новее, чем в целевом объекте, а в случае каталога он должен бытьрекурсивнокопия с такими возможностями
как

 $ ls -a ~/.config
 gtk-2.0/             
 gtk-3.0/
 SpeedCrunch/

 $ ls -a /other/path/home/.config/
 gtk-2.0/             
 gtk-3.0/
 SpeedCrunch/


$ rsync -u --existing ~/.config /other/path/home/
skipping directory .

не могу работать.

Какая утилита Linux и как это сделать/решить? Спасибо заранее

решение1

Быстрый:

Вы забыли включить рекурсивный переключатель "-r":

rsync -u --existing -r ~/.config /other/path/home/

Дополнительные материалы:

Кроме того, вы можете рассмотреть возможность использования -aswitch, который эквивалентен -rlptgoDвключению рекурсии в дополнение к сохранению некоторых важных атрибутов следующим образом:

  • -r: рекурсия в каталоги
  • -l: копировать символические ссылки как символические ссылки
  • -p: сохранить разрешения
  • -t: сохранить время модификации
  • -g: сохранить группу
  • -o: сохранить владельца (только суперпользователь)
  • -D: сохранить специальные файлы так же, как и --devices --specials

Для тестирования используйте следующее:

mkdir src
touch src/file{1..3}
touch src/thefile
# Destination:
mkdir dst
touch dst/file{1..3}
touch -d 20201023 dst/thefile
# List all
free -D src dst

Попробуй сейчас:

rsync -rt -uPv --existing src dst/

Я использовал:

  • -r: рекурсия в каталоги
  • -t: сохранить время модификации
  • -u: пропускать файлы, которые на приемнике более новые
  • -P: показывать прогресс во время передачи
  • -v: увеличить подробность
  • --existing: пропустить создание новых файлов на приемнике

Связанный контент