进行本地复制时是否有可能使 scp 失败?

进行本地复制时是否有可能使 scp 失败?

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 "$@"

相关内容