Как использовать rsync, не выбирая файл

#rsync

#rsync

Вопрос:

Я хотел бы использовать --delete возможность rsync удаления всего в каталоге назначения.

То, что я сейчас делаю, это:

 rsync -zavr --delete ./input_dir_1/ user@host:dest_dir/
rsync -zavr ./input_dir_2/ user@host:dest_dir/
rsync -zavr ./input_dir_3/ user@host:dest_dir/
  

Но для того, чтобы использовать rsync в цикле, есть ли способ сначала не выбирать входной файл (и использовать --delete , чтобы просто удалить все)? В идеале я хотел бы что-то вроде:

 # Delete everything on destination dir
rsync -zavr --delete /dev/null user@host:dest_dir/

# Now iterate over all input directories (could use a for loop)
rsync -zavr ./input_dir_1/ user@host:dest_dir/
rsync -zavr ./input_dir_2/ user@host:dest_dir/
rsync -zavr ./input_dir_3/ user@host:dest_dir/
  

Ответ №1:

  1. rsync использует ssh. Почему бы не удалить напрямую? (Будьте осторожны, чтобы не удалить неправильный каталог!)
 ssh user@host 'rm -rf dest_dir; mkdir dest_dir'
  
  1. Вы можете использовать функцию исключения rsync:
 rsync -r --exclude='*' --delete-excluded / user@host:dest_dir/
  

Для источника будет работать любая папка.