Я часто отправляю файлы rsync в один и тот же каталог на удаленном компьютере. Можно ли дать ему псевдоним, чтобы мне не приходилось каждый раз вводить его полностью?
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
. Удачи с переводами.
Вы можете добавить такой псевдоним 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" будет выполнена.
Похожие вопросы
Новые вопросы
bash
Для вопросов о скриптах, написанных для командной оболочки Bash. Для сценариев оболочки с ошибками / синтаксическими ошибками, пожалуйста, проверьте их с помощью программы shellcheck (или на сервере веб-проверки оболочки по адресу https://shellcheck.net) перед размещением здесь. Вопросы об интерактивном использовании Bash, скорее всего, будут касаться темы Super User, а не переполнения стека.