É possível fazer o scp falhar quando você faz uma cópia local?

7

É possível fazer scp falhar quando você faz uma cópia local? Acho irritante criar arquivos acidentalmente com nomes como 192.168.11.5 quando eu quisesse digitar 192.168.11.5: e, portanto, copiar o arquivo para o computador remoto.

    
por Jason Axelson 12.01.2012 / 21:08

2 respostas

6

Não por padrão, mas se você quiser algo rápido você pode simplesmente criar um wrapper em torno dele algo como mover o binário original para scp.orig e ter um novo shell script que receba a entrada, verifique se existe um: na entrada e passa, se não pede para continuar?

Editar: esta postagem responde à minha pergunta, então estou aceitando, mas queria adicionar a função de shell que escrevi que resolve o problema para mim:

# 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
}
    
por 12.01.2012 / 21:18
1

Não há essa opção em scp . Você pode escrever um script wrapper que verifique os argumentos. Aqui está um (não testado, digitado diretamente no navegador). Ele verifica se o último argumento (o destino) contém um : ou se todos os argumentos anteriores de não opção (as fontes) contêm : .

#!/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 "$@"
    
por 13.01.2012 / 22:55

Tags