我正在尝试将某些文件的远程md5sum
结果与我的本地md5sum
文件以及hash
和{{1}匹配的本地filename
文件进行比较应该从本地服务器中删除。
关于从两者中获取md5sum
的整个算法已经完成,我有这样的事情:
remote_list="<hash values> <filename>.gz"
local_list="<hash values> <filename>.gz"
但现在我需要对两个列表中的内容进行比较。
我在考虑做两个for's
,但我想知道这是一个好方法(并且是一个有效的方法)。
到目前为止,我做到了这一点:
#!/bin/bash
datacenter="amazon"
hostname=`hostname`;
path="backup/server245"
s3=`s3cmd ls --list-md5 s3://company-backup/company/"$datacenter"/"$hostname"/"$path"/`;
s3_list=$(echo "$s3" | tr -s ' ' | cut -d ' ' -f 4,5 | sed 's= .*/= =');
echo "$s3_list"
locally=`md5sum /"$path"/*.gz`;
echo "$locally";
locally_list=$(echo "$locally" | sed 's= .*/= =');
echo "$locally_list";
这给了我这个输出:
d41d8cd98f00b204e9800998ecf8427e #md5 from remote folder
41eae9b40d23de2f02bf07635870f6d0 app.20121117040001.gz #remote file
541b1bf78682f48867cc99dbb53c4c3a app.20121118040001.gz #remote file
31d90af7969f5003b27f68e27e7f2cb1 app.gz #remote file
31d90af7969f5003b27f68e27e7f2cb1 /backup/server245/app.gz #local file
所以按照这个想法,我在两个地方都有app.gz
,所以我可以从我的本地机器上删除它。
有什么想法或建议吗?
答案 0 :(得分:1)
如果仅在md5sum和文件名相同的情况下考虑匹配,那么它很简单:
sort remote_list local_list | uniq -d > duplicate_list
(重要说明:这假设在任一文件列表中都没有重复。如果你已正确完成md5sums,肯定不应该重复。)