1

У меня есть этот вывод из команды 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
    ..

Я пытаюсь проверить, совпадает ли md5sum из моего объекта в корзине с моим md5sum на моей локальной машине. Поэтому для этого мне нужно получить результат hash в качестве fourth столбца и имя файла в качестве fifth столбца.

Как это:

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

Но мне нужно только имя файла, поэтому для этого я использую команду basename (я пока не знаю, как ее использовать, но выясню), в конце это выглядит так:

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;

Теперь мне нужно сохранить результат из echo's в той же переменной, как эти:

41eae9b40d23de2f02bf07635870f6d0 app.20121117040001.gz

Таким образом, я мог бы сравнить результаты s3cmd ls --list-md5sum с моим md5sum *.gz работающим локально.

update Используя подход diff, моя команда выглядит так:

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)

Дать следующий результат:

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

Но как узнать файл, который отличается тогда? (потому что все равные я могу удалить alredy)

2 ответа2

5

Вам не нужны переменные. Вы можете использовать diff для сравнения результатов двух разных команд:

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

Возможно, вам придется sort выходные данные, чтобы файлы были в том же порядке.

1

Ответ @ choroba - это путь, но здесь есть другой способ использования переменных по запросу:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .