如何将回声结果保存到变量中?

Val*_*lva 1 linux bash shell s3cmd

我有一个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
    ..
Run Code Online (Sandbox Code Playgroud)

我正在尝试验证md5sum来自存储桶中的对象是否与md5sum本地机器中的对象匹配。因此,我需要将hash结果作为fourth列,将文件名作为fifth列。

像那样:

41eae9b40d23de2f02bf07635870f6d0  s3://company-backup/company/amazon/ip-11-11-111-11/backup_server245/app.20121117040001.gz
Run Code Online (Sandbox Code Playgroud)

但我只需要文件名,因此我使用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;
Run Code Online (Sandbox Code Playgroud)

现在我需要将结果存储echo's在相同的变量中,如下所示:

41eae9b40d23de2f02bf07635870f6d0 app.20121117040001.gz
Run Code Online (Sandbox Code Playgroud)

所以我可以将结果s3cmd ls --list-md5sum与我md5sum *.gz在本地运行的结果进行比较。

更新 使用差异方法我的命令看起来像:

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)
Run Code Online (Sandbox Code Playgroud)

给出以下结果:

1,50c1,49
< d41d8cd98f00b204e9800998ecf8427e 
< 41eae9b40d23de2f02bf07635870f6d0 app.20121117040001.gz
< 541b1bf78682f48867cc99dbb53c4c3a app.20121118040001.gz
..
---
> 41eae9b40d23de2f02bf07635870f6d0  /backup/diveo245/app.20121117040001.gz
> 541b1bf78682f48867cc99dbb53c4c3a  /backup/diveo245/app.20121118040001.gz
..
Run Code Online (Sandbox Code Playgroud)

但是如何知道不同的文件呢?(因为所有相同的我都可以删除)

cho*_*oba 5

你不需要变量。您可以使用diff来比较两个不同命令的输出:

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

您可能需要sort输出以使文件具有相同的顺序。

  • 或者省略 `diff` 部分,将输出写入一个类似 `s3.md5` 的文件并使用 `md5sum -c s3.md5` 来检查你的本地文件。 (2认同)