Wie kann man das Echo-Ergebnis in einer Variablen speichern?

1458
Valter Silva

Ich habe diese Ausgabe von einem s3cmd ls --list-md5Befehl.

 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 .. 

Ich versuche zu überprüfen, ob die md5sumvon meinem Objekt im Bucket mit meinem md5sumin meinem lokalen Computer übereinstimmen . Dafür muss ich das hashErgebnis als fourthSpalte und Dateiname alsfifth Spalte erhalten.

So wie das:

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

Aber ich brauche nur den Dateinamen, also benutze ich den basenameBefehl (ich weiß nur noch nicht, wie ich ihn hier benutzen soll, aber ich werde es herausfinden), am Ende sieht das so aus:

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; 

Jetzt muss ich das Ergebnis von echo'sder gleichen Variablen wie folgt speichern :

41eae9b40d23de2f02bf07635870f6d0 app.20121117040001.gz 

So konnte ich die Ergebnisse s3cmd ls --list-md5summit meiner md5sum *.gzlokalen Ausführung vergleichen .

update Mit dem diff-Ansatz sieht mein Befehl folgendermaßen aus:

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) 

Geben Sie das folgende Ergebnis:

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

Aber woher weiß man die Datei, die dann anders ist? ('weil alle gleich sind kann ich alredy löschen)

1
Kannst du nicht einfach `Var = $ (echo ....)`? demure vor 10 Jahren 1

2 Antworten auf die Frage

5
choroba

Sie brauchen keine Variablen. Sie können diffdie Ausgaben zweier verschiedener Befehle miteinander vergleichen:

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

Möglicherweise müssen Sie für sortdie Ausgaben die Dateien in derselben Reihenfolge anzeigen.

Oder lassen Sie den `diff`-Teil aus, schreiben Sie die Ausgabe in eine Datei wie` s3.md5` und verwenden Sie `md5sum -c s3.md5`, um Ihre lokalen Dateien zu überprüfen. mpy vor 10 Jahren 2
Ich verstehe nur nicht die Ausgabe des Diff und wie man damit umgeht. Ich aktualisiere meinen Beitrag mit der Ausgabe. Valter Silva vor 10 Jahren 0
@ValterHenrique: In Ihrer ursprünglichen Frage haben Sie `md5sum * .gz` ausgeführt. Wenn Sie den Pfad zu den `md5sum'-Argumenten angeben, müssen Sie ihn aus seiner Ausgabe oder` cd / backup / server245 / *. Gz` löschen und den von mir bereitgestellten Befehl verwenden. choroba vor 10 Jahren 1
Habe es, danke für deine Hilfe, Freund! Es hilft mir wirklich raus. Valter Silva vor 10 Jahren 0
1
terdon

Die Antwort von @ choroba ist der Weg zu gehen, aber es gibt einen anderen Weg, um Variablen wie gewünscht zu verwenden:

s3=`s3cmd ls --list-md5 \ s3://company-backup/company/amazon/ip-11-11-111-11/backup_server245/ |  awk '' | awk -F"[/ ]" ''` echo $s3 41eae9b40d23de2f02bf07635870f6d0 app.20121117040001.gz 
+1 für den `awk -F ... $ NF`-Trick. mpy vor 10 Jahren 0