Meu primeiro pensamento ao ler sua pergunta foi "Isso parece um trabalho para rsync
!". Infelizmente, enquanto rsync
pode de fato pular prédios altos em um único limite, ele não pode lidar com FTP. Se você tiver acesso ssh ao espelho, as coisas serão muito mais fáceis.
Assumindo que não, você pode tentar montar o diretório FTP remoto localmente, e então você pode usar o simples cp
(inspirado em isto ):
-
Instale o curlftpfs. Se você está em uma distro baseada no Debian (eu suponho que você esteja usando Linux desde que você mencionou
wget
), executeapt-get install curlftpfs
-
Criar caminho de montagem local
mkdir -p /mnt/myftp
-
Monte o site ftp de destino usando
curlftpfs
curlftpfs -o allow_other ftp://user:[email protected] /mnt/myftp
-
Use
cp
para copiar os arquivos, passando um comandofind
como argumento:cd /mnt/myftp && \ cp -v --parents 'find . -type f -mtime -20' ~/foo/
Explicação:
- O comando
find
encontrará todos os arquivos (-type f
) no servidor FTP remoto que foram modificados < = há 20 dias (-mtime 20
). - O comando
cp
copia esses arquivos- Se eles forem mais recentes que o arquivo correspondente no diretório de destino (
-u
) - Preservando seus diretórios pai (
--parents
)
- Se eles forem mais recentes que o arquivo correspondente no diretório de destino (
-
O
cd /mnt/myftp
bit é necessário para quecp
crie os diretórios pai corretos na pasta de destino. Se você nãocd
para o diretório ftp,cp
criará pastas como esta:~/foo/mnt/myftp/bar
Em vez disso:
~/foo/bar
Combinados, esses comandos / opções devem ter o efeito desejado de espelhar o servidor remoto, ignorando os arquivos mais antigos.
Advertências:
Este é um cenário relativamente simplista. Se você tiver requisitos mais avançados (todas as opções wget
que você deixou de fora), convém dar uma olhada em man cp
ou, para opções mais avançadas, man rsync
. Você poderá fazer basicamente a mesma coisa em rsync
passando o resultado do comando find
usando a opção rsync
--include-from
.
Se você atualizar sua pergunta com requisitos mais específicos (como preservar links, links físicos, carimbos de data e hora, privilégios de usuário, recursão de diretório e afins), eu deveria poder modificar minha resposta para atendê-los.