0
내 로컬 md5sum
파일과 일치하는 파일이있는 서버에서 일부 파일의 원격 결과를 비교하려고 시도하면 로컬 서버에서 hash
및 filename
을 제거해야합니다.bash에서 두 쌍의 목록을 비교하는 방법은 무엇입니까?
모두에서 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
, 그래서 내 로컬에서 삭제할 수 있습니다
지금까지이 짓 내 컴퓨터. 의견이나 제안이 있으십니까? 당신이 md5sum이와 파일 이름이 동일한 경우에만 일치하는 항목을 고려하는 경우
나는 당신의 접근법을 시도했지만,'sort : open failed : 31d90af7969f5003b27f68e27e7f2cb1 : No such file or directory'라는 에러가 나에게 왜 발생하는지 알겠습니까? 그거? –
@ValterHenrique : 죄송합니다.'remote_list'와'local_list'는 쉘 변수가 아닌 파일이라고 생각했습니다. 변수를 사용하려면 두 변수를 sort로 파이프해야합니다.'(echo "$ s3_list"; echo "$ local_list") | 정렬 | 유니크 -d'. 그러면 md5sum과 filename이 반환됩니다. 파일 이름을 추가하려면'cut'을 사용해야합니다. 길의 경로 정보를 잃어 버리기 때문에 경로 이름을 정규화하는 더 좋은 방법을 찾아야한다고 생각합니다. – rici
괜찮습니다. 도움을 주셔서 감사합니다. –