Как сохранить результат эха в переменную?
У меня есть этот выход из 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 ответа
Вам не нужны переменные. Ты можешь использовать diff
сравнить результаты двух разных команд:
s3cmd ls --list-md5 \
| tr -s ' ' \
| cut -d ' ' -f 5,6 \
| sed 's= .*/= =' \
| diff -w - <(md5sum *.gz)
Вам может понадобиться sort
выходы, чтобы файлы были в том же порядке.
Ответ @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