Skript, das die Größe von zwei Dateien vergleicht und eine Warnmeldung ausgibt

431
stefzeer

Ich bin ein absoluter Noob im Scripting, aber ich brauche ein Skript, das die Größe von zwei Dateien vergleicht und eine Warnung ausgibt, wenn eine dieser Dateien 10% größer ist als die andere.

Bisher bin ich dazu gekommen:

#!/bin/bash test1=/trans/home/user/test1 test2=/trans/home/user/test2 test1=$(stat -c%s "$test1") test2=$(stat -c%s "$test2")  if (( test2 > 110 * test1 )) then echo "WARNING: test2 has increased 10% or more in size" fi 

Ich habe zwei Dateien mit Berührung erstellt und deren Größe mit abgeschnittenen Elementen gebastelt. Unabhängig von der Größe, die ich ihnen gebe, wird die Warnmeldung nicht angezeigt. UNO Wenn ich das größere als das <Zeichen setze, wird die Warnmeldung angezeigt. Dies funktioniert jedoch nicht für mich.

Alle Ideen, wie Sie diese bearbeiten können, werden geschätzt.

Grüße.

2

3 Antworten auf die Frage

3
RalfFriedl

Du brauchst

if (( test2 > 110 * test1 / 100)) 

size plus 10% ist 1,10 oder 110/100, nicht 110. Beachten Sie, dass Sie zuerst multiplizieren und dann teilen sollten, andernfalls ist 110/100 auf eine ganze Zahl gerundet nur 1,00. Andererseits kann 110 * test1 den ganzzahligen Bereich überschreiten, was jedoch bei Dateigrößen und 64-Bit-Ganzzahlen unwahrscheinlich ist.

In diesem Fall würde eine Multiplikation mit 11 und eine Division durch 10 das Überlaufrisiko verringern. "test1 / 10 + test1" kann noch besser sein. Kamil Maciorowski vor 5 Jahren 0
@KamilMaciorowski Das stimmt, aber wie ich bereits erwähnt habe, ist das Risiko, dass 64 Bits mit einer Dateigröße überlaufen, gering, und auch leicht verständlicher Code hat seinen Wert. RalfFriedl vor 5 Jahren 0
2
Alex

Deine Mathematik stimmt nicht. Nachfolgend finden Sie ein Skript, das einen bcPräzisionsrechner verwendet, der eine Fließkommaoperation ausführen kann, ohne sich einen Überlauf zu merkenbash

#!/bin/bash  test1=/trans/home/user/test1 test2=/trans/home/user/test2 test1sz=$(stat -c%s "$test1") test2sz=$(stat -c%s "$test2")  [ $(echo "scale=2; $ > $*1.1" | bc) -eq 1 ] && { echo "WARNING: $ has increased 10% or more in size" } 
0
stefzeer

Schaffte es so zu machen:

#!/bin/bash test1=/trans/home/stefan01/test1 test2=/trans/home/stefan01/test2 test1=$(stat -c%s "$test1") test2=$(stat -c%s "$test2") PERC=$(bc <<< "scale=2; ($test2 - $test1)/$test1 * 100") echo "$PERC %" 

Dies zeigt den genauen Unterschied der Dateigröße in Prozent. Ich kann jetzt einfach, ob / dann auch eine Warnmeldung anzeigen, wenn das Ergebnis 10% oder mehr beträgt.

Vielen Dank für Ihre Hilfe, Jungs.