Я часто отправляю файлы rsync в один и тот же каталог на удаленном компьютере. Можно ли дать ему псевдоним, чтобы мне не приходилось каждый раз вводить его полностью?

0
Stangoesagain 14 Мар 2018 в 11:35

2 ответа

Лучший ответ

Да. Обычно я создаю короткие сценарии, которые определяют параметры rsync и каталоги src и dest или, возможно, массивы, содержащие интересующие каталоги, для передачи файлов между хостами, которые я администрирую. Обычно я просто передаю файл для передачи файлов src и dest в качестве аргументов псевдониму для этого хоста (поэтому мне не нужно вводить имя хоста и т. Д.). Просто убедитесь, что сценарий исполняемый, и определите псевдоним в своем .bashrc. Работает нормально. (Обычно я использую rs_host для отправки на удаленный хост и псевдонимы rsf_host (f означает «от»).

Например, скажем, у меня есть хост valkyrie.3111skyline.com, который доступен только в моей локальной сети. У меня так много зеркал и хранилища программного обеспечения для обновления детских компьютеров, а также резервных копий моих вещей. Хотя у меня есть сценарии резервного копирования для массовых каталогов, иногда мне просто нужно было отправить файл на сервер или получить файл с него. Я не люблю печатать, поэтому делаю этот процесс как можно короче. Для этого я установил псевдонимы (как описано выше) с rsvl на rsync для валькирии и rsfvl на rsync для валькирии. Если я обновил свой .bashrc и хочу отправить его валькирии, мне нужно только ввести:

rsvl ~/.bashrc

Точно так же, если я хочу получить файл из valkyrie (скажем, какой-нибудь файл C в ~/dev/src-c/tmp/getline_ex.c и перенести его в мой текущий каталог, я хочу только ввести:

rsfvl ~/dev/src-c/tmp/getline_ex.c

Я хочу, чтобы сценарии брали это оттуда. Поскольку я знаю, что могут быть крайние случаи, и я часто хочу подтвердить передачу, включающую большое количество файлов, у меня есть сценарии, принимающие параметр -n (--dry-run), чтобы сценарии показывали, что будет быть сделано до того, как они это сделают. (удобно, когда вы не совсем уверены)

Я храню свои rsync скрипты в ~/scr/net (не слишком креативно, я знаю ...). В моем .bashrc псевдонимы просто:

alias rsvl='/home/david/scr/net/rsyncvl.sh'
alias rsfvl='/home/david/scr/net/rsyncfvl.sh'

Сами скрипты - это просто быстрые и грязные вспомогательные скрипты, позволяющие rsync делать то, что я хочу, например сценарий rsyncvl.sh (к валькирии):

#!/bin/bash --norc

desthost=valkyrie.3111skyline.com
excl='--exclude=.~* --exclude=*.class'

usage() {       ## simple usage function to display usage
cat >&2 << USG

  usage: ${0##*/} [[-n|--dry-run|'options'] src [dest (~/Documents)]

for  

  rsync [-uai[n]]'options' \$src ${desthost}:\$dest [${desthost}:~/Documents]

USG

    exit 0
}

## test for '-h' or '--help'
[ -z "$1" ] || [[ "${1:0:3}" =~ '-h' ]] && usage

## test for additional options passed to rsync
if test "${1:0:1}" == '-'; then

  # options present so src is $2, dest is $3
  src="$2"
  destfn=${3:-~/Documents}
  dest="${desthost}:${destfn}"

  # preserve '-n' capability for '-uain' test
  if test "$1" == '-n' || test "$1" == '--dry-run'; then
    echo "[DRY RUN]"
    opts='-uain'
  else
    # use options supplied for rsync
    opts="$1"
  fi

else

  # default use
  src="$1"
  destfn=${2:-~/Documents}
  dest="${desthost}:${destfn}"
  opts='-uai'

fi

## output the text of the comman executed
echo "rsync $opts $excl ${src} ${dest}"

if [[ "$src" =~ '*' ]]; then
  rsync $opts $excl ${src} "${dest}"   # allow file globbing expansion
else
  rsync $opts $excl "${src}" "${dest}"
fi

И скрипт для получения файлов от валькирии:

#!/bin/bash --norc

src="$1"        ## source file on srchost
dest="${2:-.}"  ## destination on local machine
srchost=valkyrie.3111skyline.com

usage() {       ## simple usage function to display usage
cat >&2 << USG
  Usage: ${0##*/} src dest ($HOSTNAME) --> rsync -uav [${srchost}:]\$src \$dest
USG

    exit 0
}

[[ -z "$1" ]] && usage

## allow '.' shorthand to set pwd as source/dest dir
[[ $src == '.' ]] && src="$(pwd)" && {
  dest="$(pwd)"
  dest="${dest%/*}"
}
[[ $src == './' ]] && src="$(pwd)/"

[[ $src =~ '/' ]] || src="$(pwd)/$src"

srcstr="${srchost}:${src}"  ## form source string

## echo command executed and execute
echo -e "\n  rsync -uav ${srcstr} ${dest}\n"
rsync -uai "${srcstr}" "${dest}"

Их всегда можно улучшить, и я не особо выделялся, когда писал первый примерно десять лет назад (который каким-то образом был продублирован для всех других хостов, которые у меня есть сейчас ...) Так что не стесняйтесь улучшать и адаптируйте их под свои нужды. Для базового использования все, что вам нужно сделать, это изменить имя хоста на имя хоста вашего удаленного компьютера, и они будут работать нормально. Оба будут отображать короткое Использование при запуске без аргументов, и сценарий to valkyrie также будет отвечать на -h или --help. Удачи с переводами.

1
David C. Rankin 14 Мар 2018 в 18:25

Вы можете добавить такой псевдоним alias myrsync='rsync -av -e "ssh" user@server:/path/to/sync /path/to/local/destination' и добавить его в свой .bashrc файл.
После этого вы набираете myrsync, и команда "rsync -av -e" ssh "user @ server: / path / to / sync / path / to / local / destination" будет выполнена.

-1
i.kimiko 14 Мар 2018 в 08:43