Respostas:
Você pode usar rsync
para isso. rsync
é realmente projetado para esse tipo de operação.
Sintaxe:
rsync -avh /source/path/ host:/destination/path
ou
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
Quando você o executa pela primeira vez, ele copia todo o conteúdo e copia apenas novos arquivos.
Se você precisar encapsular o tráfego através de uma conexão SSH (por exemplo, para fins de confidencialidade), conforme indicado por você originalmente solicitando uma solução baseada em SCP, basta adicionar -e ssh
os parâmetros a rsync
. Por exemplo:
rsync -avh -e ssh /source/path/ host:/destination/path
rsync -t *.c foo:src/
-> "Isso transfere todos os arquivos correspondentes ao padrão * .c do diretório atual para o diretório src na máquina foo. Se algum dos arquivos já existir no sistema remoto, o rsync remote- protocolo de atualização é usado para atualizar o arquivo, enviando apenas as diferenças "
rsync -avuzh /source/path/ host:/destination/path
. Isso faz todo o trabalho em um comando e, nas chamadas subseqüentes, apenas transfere os arquivos que precisam dele.
Se você quiser ficar com o scp por qualquer motivo, poderá remover as permissões w dos seus dados locais (se tiver o direito de fazê-lo) e o scp não tocará neles. Para ser mais preciso:
chmod a-w local/*.tar.gz
(no seu diretório local)scp remote/*.tar.gz local
Isso não é muito eficiente, agradável, mas pode ajudar se você precisar de uma solução temporária rápida sem mudar para outra coisa além de scp. (Kudos: scp sem substituir arquivos existentes no destino )
Não havia uma resposta exata sobre como fazer isso com o SCP, pois era isso que a pergunta original estava perguntando.
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r username@server.com:/file/location/* /files
Quando terminar de copiar os arquivos, altere as permissões novamente:
sudo chmod a+w -R /files
--ignore-existing
realmente necessário?