
Folgendes habe ich in meiner Shell-Datei:
FILENAME=/var/lib/backups/html-backup/backup-15-04-2016.tar.gz;
FILESIZE= $(ls -lah $FILENAME | awk '{ $FILESIZEINGB = $5}')
echo "Size is $FILESIZEINGB ."
Können Sie mir bitte sagen, warum ich die Dateigröße nicht in lesbarer Form sehen kann?
Es scheint, dass $FILESIZEINGB nicht festgelegt ist und ich das Ergebnis nicht in der Ausgabe sehen kann echo
.
Antwort1
Sie können eine Shell-Variable nicht von einem untergeordneten Prozess aus festlegen. Daher FILESIZEINGB
würde das Festlegen sowieso nicht funktionieren (und es würde nicht funktionieren, weil es in awk
der Syntax etwas anderes bedeutet).
Benutz einfach du -h
:
FILESIZEINGB=$(du -h "$FILENAME" | awk '{print $1}')
Auch:
- Nach sollte kein Leerzeichen stehen
=
.
Antwort2
Oder wenn Sie nicht verwenden möchten du
:
FILESIZE=$(ls -lah $FILENAME | awk '{ print $5}')
echo "Filesize is $FILESIZE"
Antwort3
Ich habe herausgefunden, dass jemand einen AWK-Einzeiler geschrieben hat. Der hatte einen Fehler, den ich aber behoben habe. Außerdem habe ich nach Terabyte auch Petabyte hinzugefügt.
FILE_SIZE=234234 # FILESIZE IN BYTES
FILE_SIZE=$(echo "${FILE_SIZE}" | awk '{ split( "B KB MB GB TB PB" , v ); s=1; while( $1>1024 ){ $1/=1024; s++ } printf "%.2f %s", $1, v[s] }')
Da stat
es nicht auf jedem System vorhanden ist, würde ich die AWK-Lösung verwenden. Beispiel: Der Raspberry Pi hat nicht, stat
aber er hat awk
.