class KuberKit::Shell::Commands::RsyncCommands def rsync(shell, source_path, target_path, target_host: nil, exclude: nil, delete: true) # Add a trailing slash to directory to have behavior similar to CP command if path_is_directory?(source_path) && !source_path.end_with?("/") source_path = "#{source_path}/" end if target_host destination = "#{target_host}:#{target_path}" else destination = target_path end args = [source_path, destination] if exclude Array(exclude).each do |e| args << "--exclude=#{e}" end end if delete args << "--delete" end shell.exec!(%Q{rsync -a #{args.join(' ')}}) end private def path_is_directory?(path) File.directory?(path) end end