scp
本地复制会不会失败?我发现意外创建文件的名称与192.168.11.5
我打算键入时的名称相同192.168.11.5:
,从而将文件复制到远程计算机很烦人。
答案1
默认情况下不是这样,但如果你想要快速的东西,你可以在它周围创建一个包装器,比如将原始二进制文件移动到 scp.orig 并有一个新的 shell 脚本,该脚本接受输入,检查输入中是否有 : 并将其传递如果没有提示是否继续?
编辑:这篇文章回答了我的问题,所以我接受,但我想添加我编写的 shell 函数来解决我的问题:
# Simple wrapper around scp to avoid forgotten colon's
scp() {
if [[ $@ == *:* ]]; then
# Looks like a valid command so run it
command scp "$@"
else
echo -n "Would you like to add a colon to the end of the function? [y/n] "
read response
if [ "$response" = "y" ]; then
command scp "$@":
else
command scp "$@"
fi
fi
}
答案2
中没有这样的选项scp
。您可以编写一个包装脚本来检查参数。这是一个(未经测试,直接在浏览器中输入)。它验证最后一个参数(目标)是否包含:
,或者所有先前的非选项参数(源)是否包含:
。
#!/bin/sh
eval "target=\${$#}"
case $target in
*:*) :;; # remote target
*) # local target
while getopts F:P:S:c:i:l:o:1246BCpqrv OPTLET; do :; done
i=$OPTIND
while [ $i -lt $# ]; do
i=$((i+1))
eval "source=\${$i}"
case $source in
*:*) :;; # remote source
*)
echo 1>&2 "Refusing to copy a local file to a local file with scp"
exit 99;;
esac
done
esac
exec scp "$@"