Estou escrevendo um script bash que precisa buscar tudo *_out.csv
de um diretório, em um servidor remoto. Todos esses arquivos são vários diretórios dentro de outro diretório. Por exemplo, digamos que o diretório seja chamado ox_20190404/
. Eu posso encontrar todos os meus arquivos indo:
find ox_20190404/assessment/LWR/validation -type f -name "*_out.csv"
Esta pergunta responde parte da minha pergunta , mas como não quero copiar o diretório inteiro, preciso descobrir como implementar o código acima. Suponha que eu comece com isso:
$ dir="/projects/ox/git"
$ server="myusername@server"
$ scp $server:$dir/$(ssh $server 'ls -t $dir | head -1') .
Como eu pegaria os arquivos que preciso de lá?
A última parte da minha pergunta se pergunta se existe uma maneira de pegar todos os arquivos copiados e colocá-los no mesmo caminho de arquivo e diretório em que estavam no servidor remoto.
Eu ajustei alguns de seus nomes de variáveis um pouco.
Certamente existem maneiras melhores de fazer isso do que algo perigoso como analisar a saída de ls , mas veja se isso funciona para você:
Depois
dir
de definido para o diretório remoto mais recente,mkdir -p
é usado para garantir que o mesmo nome de diretório exista localmente. Em seguida,scp
os arquivos em um diretório local com o mesmo caminho e nome do diretório remoto. Eu estava procurando uma solução rsync, mas não conseguia pensar em uma.Isso encontrará o diretório modificado (criado) mais recentemente, supondo que o nome do diretório não contenha uma nova linha (
\n
)Se você puder garantir que o destino contém apenas diretórios de interesse, poderá simplificá-lo consideravelmente (novamente, tendo em mente o problema da nova linha)
Você pode copiar uma árvore inteira de arquivos usando
scp
, mas se quiser filtrá-lo, provavelmente será melhor usarrsync
Se você está mantendo o conjunto anterior de arquivos localmente e realmente deseja adicionar o conjunto mais recente sem copiar os anteriores,
rsync
também pode fazer issoEste é o código que acabou funcionando para mim. Eu posso não ter descrito minha pergunta perfeitamente, mas não estava tendo problemas para encontrar o diretório alterado mais recentemente. Meu problema foi encontrar todos os arquivos nesse diretório e garantir que eles terminassem no lugar certo na minha máquina local. Aqui está o script bash para fazer isso:
Rscript: