Esta é uma função de shell simples ( bash
e ksh93
) que envolve scp
. Ele se recusará a executar o% realscp
se o arquivo de destino existir no sistema.
function scp
{
typeset argv="$@"
typeset target="${argv[-1]}"
if [[ -e "$target" ]]; then
echo 'Target file exists, refusing to overwrite' >&2
return 1
fi
command scp "$@"
}
A função seleciona o destino do último argumento de linha de comando e, em seguida, verifica se ele corresponde a um nome de arquivo existente. Em caso afirmativo, ele se recusará a executar scp
, exibindo uma mensagem de diagnóstico e retornando um status de saída diferente de zero.
Se não houver nenhum nome de arquivo existente correspondente ao destino, ele vai em frente e chama o% real% co_de com a linha de comando original.
Nenhuma tentativa é feita para distinguir entre uma transferência em uma direção ou outra. Isso falhará se houver um nome de arquivo correspondente ao formato scp
-type no diretório atual.
Se você tiver uma lista de nomes de arquivos protegidos em um arquivo (esta deve ser uma lista de nomes absolutos, um por linha, correspondente ao caminho real de cada arquivo conforme retornado pelo utilitário GNU coreutils user@hostname:file
):
function scp
{
typeset argv="$@"
typeset target="${argv[-1]}"
if grep -q -F -x "$( realpath "$target" )" protected_files.txt; then
echo 'Target filename is protected, refusing to overwrite' >&2
return 1
fi
command scp "$@"
}