Isso lista todos os arquivos em dois backups, classificados por tamanho:
tar tvf backup1.tar.bz2 |sort -k3 -n >backup1_files.txt
tar tvf backup2.tar.bz2 |sort -k3 -n >backup2_files.txt
Eu gostaria de listar todos os arquivos presentes em backup2.tar.bz2 mas não presentes em backup1.tar.bz2 , ordenados por tamanho.
Como fazer isso?
NB:
Fazer um
diff
desses arquivos .txt não funcionará porque as datas de modificação de alguns arquivos não serão as mesmas. Assim, esta pergunta não é uma duplicata de Existe uma ferramenta para obter as linhas em um arquivo que não estão em outro? .A remoção
v
removeria as datas de modificação, mas também os tamanhos dos arquivos, portanto, não é uma opção porque seria impossível classificá-los por tamanho.
Se você tem AWK, você pode usar um forro como este:
Isso criará uma matriz AWK com os nomes de arquivo do backup 2 e, em seguida, verificará se os nomes de arquivo do backup 1 estão presentes nessa matriz. Se não, ele irá imprimi-los.
EDIT: Aqui está uma versão aprimorada que é mais robusta para arquivos com espaço em branco no nome e não precisa de arquivos temporários:
Você pode escrever o código awk em um arquivo como
intersect.awk
e reutilizá-lo como:Os métodos propostos de outras respostas não funcionam, pois o tar imprimirá:
se houver links simbólicos no arquivo e mensagens semelhantes para links físicos.
Então, a única maneira de lidar com isso é usar
star
:Faça isso para todos os arquivos, classifique a saída e use os métodos conhecidos para comparar os arquivos resultantes.
A opção
-tpath
dizstar
para imprimir apenas o nome do arquivo, uma vez em uma linha.star
faz parte doschilytools
.BTW: Se um nome de arquivo contiver um caractere de nova linha, esse método confundirá as ferramentas de comparação.