rsync 可以使用 shorthand/alias 作为地址吗?
Can rsync use shorthand/alias for an address?
我经常将文件同步到远程机器上的相同目录。是否可以给它一个别名,这样我就不必每次都输入完整的名称?
您可以像这样添加别名 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" 将被执行。
是的。通常我会设置简短的脚本来定义 rsync
选项以及 src
和 dest
目录或可能包含感兴趣目录的数组,以便在我管理的主机之间传输文件。我通常只是将要传输的 src 和 dest 文件作为参数传递给该主机的别名(这样我就不必输入主机名等)。只要确保脚本是可执行的,并在 .bashrc 中定义别名即可。它工作正常。 (我通常使用 rs_host 发送到远程主机,以及 rsf_host 的别名(f 表示 'from')。
例如,假设我有一个主机 valkyrie.3111skyline.com
,它只能在我的局域网内访问。我在那里做了很多镜像和软件存储,用于更新孩子们的电脑以及我的东西的备份。虽然我有批量目录的备份脚本,但有时我只是将文件发送到服务器或从服务器获取文件。我不喜欢打字,所以我尽量缩短这个过程。为此,我设置了别名(如上所述),从 rsvl
到 rsync
到 valkyrie,从 rsfvl
到 rsync
从 valkyrie。如果我已经更新了我的 .bashrc
并且我想将它发送给 valkyrie,我只想输入:
rsvl ~/.bashrc
同样,如果我想从 valkyrie 中获取一个文件(比如 ~/dev/src-c/tmp/getline_ex.c
中的某个 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
脚本(对 valkyrie)是:
#!/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:0:3}" =~ '-h' ]] && usage
## test for additional options passed to rsync
if test "${1:0:1}" == '-'; then
# options present so src is , dest is
src=""
destfn=${3:-~/Documents}
dest="${desthost}:${destfn}"
# preserve '-n' capability for '-uain' test
if test "" == '-n' || test "" == '--dry-run'; then
echo "[DRY RUN]"
opts='-uain'
else
# use options supplied for rsync
opts=""
fi
else
# default use
src=""
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
以及从 valkyrie 获取文件的脚本:
#!/bin/bash --norc
src="" ## 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 "" ]] && 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}"
它们总是可以改进的,大约十年前我写第一个时我并没有那么特别(不知何故我现在拥有的所有其他主机都复制了它......)所以随时根据您的需要改进和定制它们。对于基本使用,您需要做的就是将主机名更改为远程机器的主机名,它们就可以正常工作了。如果 运行 没有参数,两者都会显示一个简短的 Usage,并且 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" 将被执行。
是的。通常我会设置简短的脚本来定义 rsync
选项以及 src
和 dest
目录或可能包含感兴趣目录的数组,以便在我管理的主机之间传输文件。我通常只是将要传输的 src 和 dest 文件作为参数传递给该主机的别名(这样我就不必输入主机名等)。只要确保脚本是可执行的,并在 .bashrc 中定义别名即可。它工作正常。 (我通常使用 rs_host 发送到远程主机,以及 rsf_host 的别名(f 表示 'from')。
例如,假设我有一个主机 valkyrie.3111skyline.com
,它只能在我的局域网内访问。我在那里做了很多镜像和软件存储,用于更新孩子们的电脑以及我的东西的备份。虽然我有批量目录的备份脚本,但有时我只是将文件发送到服务器或从服务器获取文件。我不喜欢打字,所以我尽量缩短这个过程。为此,我设置了别名(如上所述),从 rsvl
到 rsync
到 valkyrie,从 rsfvl
到 rsync
从 valkyrie。如果我已经更新了我的 .bashrc
并且我想将它发送给 valkyrie,我只想输入:
rsvl ~/.bashrc
同样,如果我想从 valkyrie 中获取一个文件(比如 ~/dev/src-c/tmp/getline_ex.c
中的某个 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
脚本(对 valkyrie)是:
#!/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:0:3}" =~ '-h' ]] && usage
## test for additional options passed to rsync
if test "${1:0:1}" == '-'; then
# options present so src is , dest is
src=""
destfn=${3:-~/Documents}
dest="${desthost}:${destfn}"
# preserve '-n' capability for '-uain' test
if test "" == '-n' || test "" == '--dry-run'; then
echo "[DRY RUN]"
opts='-uain'
else
# use options supplied for rsync
opts=""
fi
else
# default use
src=""
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
以及从 valkyrie 获取文件的脚本:
#!/bin/bash --norc
src="" ## 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 "" ]] && 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}"
它们总是可以改进的,大约十年前我写第一个时我并没有那么特别(不知何故我现在拥有的所有其他主机都复制了它......)所以随时根据您的需要改进和定制它们。对于基本使用,您需要做的就是将主机名更改为远程机器的主机名,它们就可以正常工作了。如果 运行 没有参数,两者都会显示一个简短的 Usage,并且 to valkyrie 脚本也会响应 -h
或 --help
。祝您转账顺利。