Localizar + Busca Recursiva do Grep

2

Estou espelhando um site usando o wget. No servidor, há um dump do comando find / , que inclui nomes de arquivos no formato:

/dir1/ /dir1/page1.txt /dir1/page2.txt ...

A mirrorring é muito grande (100GB +) e eu gostaria de comparar a saída local de find ao arquivo de texto que contém o dump do lado do servidor, para ter uma idéia de quantos arquivos ainda restam.

Eu estava pensando em usar um grep -v ... ou awk , mas não tenho certeza de como alguém faria isso.

Alguém pode me ajudar por favor?

Obrigado!

    
por Alexandre Cassagne 11.04.2014 / 20:44

4 respostas

2

Você pode fazer isso com comm (usando bash process substitution):

comm -13 <(find / | sort) <(sort server_dump)

Isso mostrará os arquivos exclusivos do servidor. Para arquivos exclusivos do sistema local:

comm -23 <(find / | sort) <(sort server_dump)

Você também pode querer adicionar a opção -xdev para impedir que ela compare arquivos em outros sistemas de arquivos, como /proc e /sys .

    
por 11.04.2014 / 20:55
2

Eu não acho que você precise usar wget's opções de download recursivas porque você tem uma lista dos arquivos que precisam ser baixados:

wget --input-file=./path/to/your/list --base=URL

Dessa maneira, você apenas seguiria a lista e, assim, todos os arquivos baixados seriam apenas os próximos da lista. Assim, você pode sempre encontrar seu progresso verificando apenas o último arquivo baixado e sua posição na lista.

Mas se isso não funcionar:

{ find . ; sed 's/.*/.&/' list.file ; } | 
    sort | uniq -u
    
por 11.04.2014 / 21:33
0

Por que não apenas despejar a saída de find em um arquivo, em ambos os hosts, e então fazer um diff nos dois arquivos? Para obter o número de arquivos, você poderia contar usando wc .

    
por 11.04.2014 / 20:55
0

Não está claro na pergunta se há acesso SSH disponível para o servidor. Se houver, eu simplesmente usaria rsync para o trabalho.

    
por 12.04.2014 / 12:08