
Как можно скопировать файл и/или каталог, только если в целевом объекте файл существует и только если он новее, чем в целевом объекте, а в случае каталога он должен бытьрекурсивнокопия с такими возможностями
как
$ 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/
Дополнительные материалы:
Кроме того, вы можете рассмотреть возможность использования -a
switch, который эквивалентен -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: пропустить создание новых файлов на приемнике