Como salvar o resultado do eco em uma variável?

1

Eu tenho essa saída de um comando s3cmd ls --list-md5 .

    2013-05-22 12:20   1965154   41eae9b40d23de2f02bf07635870f6d0  s3://company-backup/company/amazon/ip-11-11-111-11/backup_server245/app.20121117040001.gz
    2013-05-22 12:20  11456836   541b1bf78682f48867cc99dbb53c4c3a  s3://company-backup/company/amazon/ip-11-11-111-11/backup_server245/app.20121118040001.gz
    ..

Estou tentando verificar se o md5sum do meu objeto no bucket corresponde ao meu md5sum em minha máquina local. Então, para isso, preciso obter o resultado hash como a coluna fourth e o nome do arquivo como a coluna fifth .

Assim:

41eae9b40d23de2f02bf07635870f6d0  s3://company-backup/company/amazon/ip-11-11-111-11/backup_server245/app.20121117040001.gz

Mas eu preciso apenas do nome do arquivo, então para isso eu estou usando o comando basename (eu não sei como usá-lo aqui ainda, mas vou descobrir), no final está parecendo assim:

s3='s3cmd ls --list-md5 s3://company-backup/company/amazon/ip-11-11-111-11/backup_server245/';
echo "$s3";

echo "$s3" |  tr -s ' ' | cut -d ' ' -f 4;
echo "$s3" |  tr -s ' ' | cut -d ' ' -f 5;

Agora preciso armazenar o resultado do echo's na mesma variável como:

41eae9b40d23de2f02bf07635870f6d0 app.20121117040001.gz

Para comparar os resultados de s3cmd ls --list-md5sum com meu md5sum *.gz em execução localmente.

atualização Usando a abordagem diff, meu comando se parece com:

ls --list-md5 s3://company-backup/company/amazon/ip-11-11-111-11/backup/server245/ \
| tr -s ' ' \
| cut -d ' ' -f 4,5 \
| sed 's= .*/= =' \
| diff -w - <(md5sum /backup/server245/*.gz)

Dando o resultado a seguir:

1,50c1,49
< d41d8cd98f00b204e9800998ecf8427e 
< 41eae9b40d23de2f02bf07635870f6d0 app.20121117040001.gz
< 541b1bf78682f48867cc99dbb53c4c3a app.20121118040001.gz
..
---
> 41eae9b40d23de2f02bf07635870f6d0  /backup/diveo245/app.20121117040001.gz
> 541b1bf78682f48867cc99dbb53c4c3a  /backup/diveo245/app.20121118040001.gz
..

Mas como saber o arquivo que é diferente então? (porque todos os que são iguais eu posso deletar alredy)

    
por Valter Silva 22.05.2013 / 15:48

2 respostas

5

Você não precisa de variáveis. Você pode usar diff para comparar as saídas de dois comandos diferentes:

s3cmd ls --list-md5 \
    | tr -s ' ' \
    | cut -d ' ' -f 5,6 \
    | sed 's= .*/= =' \
    | diff -w - <(md5sum *.gz)

Você pode precisar sort das saídas para ter os arquivos na mesma ordem.

    
por 22.05.2013 / 16:01
1

@ A resposta da choroba é o caminho a seguir, mas aqui está outra maneira de usar as variáveis conforme solicitado:

s3='s3cmd ls --list-md5 \
 s3://company-backup/company/amazon/ip-11-11-111-11/backup_server245/ | 
 awk '{print $4,$5}' | awk -F"[/ ]" '{print $1,$NF}''
echo $s3
 41eae9b40d23de2f02bf07635870f6d0 app.20121117040001.gz
    
por 22.05.2013 / 16:45