Embora essa não seja a resposta direta, sugiro usar rsync
para isso:
Eu tenho os seguintes arquivos em um diretório data
: myfile1.txt
myfile2.jnx
myfile3.sur
.
Eu uso o comando abaixo para copiar o conteúdo do diretório acima para outro local:
scp data/* remotehost.example.com:/data/
No entanto, encontro um problema quando o conteúdo do diretório é alterado dinamicamente após a emissão do comando. Como o arquivo myfile3.sur
alterado para myfile3.sur1
por outro aplicativo que trabalha nesse diretório em segundo plano enquanto o primeiro arquivo ainda está sendo copiado.
Sei que o shell traduziria *
para todos os nomes de arquivos nesse diretório quando eu acionasse meu comando. Existe uma maneira de dizer ao Linux para incluir os arquivos alterados / atualizados também?
Para garantir que o arquivo desejado com nome como está e o conteúdo como está será transferido, crie um script com a seguinte lógica:
mkdir data/temp.$$
cp data/* data/temp.$$
scp data/temp.$$/* remotehost.example.com:/data/
rm data/temp.$$
Copiar os arquivos para um diretório temporário no mesmo servidor garantirá que a última transferência obtenha o arquivo.
Note que se os arquivos forem constantemente alterados por processos em segundo plano, tente fazer dependências com esses processos.