
ich muss einen String in eine Ganzzahl ändern, da ich die Größe der Datei (extrahieren mit: stat -c%s $filename) mit einer Zahl überprüfe. Folgen Sie dem vollständigen Skript:
#!/bin/bash
# Variable that contain path destination file
path=/sobstitude
# Variable for size
size=1000
# Loop for file scan
for filename in /test/*;
do
# Take the size of file
filesize=$(stat -c%s $filename)
# Check if the file is empty
if [ $filesize > $size ]
then
# Replace file
mv $filename $path
fi
done
exit 0;
Antwort1
In bash
/ sh
-Variablen sind Zeichenfolgen enthalten, es gibt kein striktes Konzept für Ganzzahlen. Eine Zeichenfolge kann wie eine Ganzzahl aussehen und das reicht aus.
stat -c%s $filename
sollte eine Zeichenfolge zurückgeben, die wie eine Ganzzahl aussieht.
In Ihrem Fall liegt das Hauptproblem im Umleitungsoperator >
(Sie haben jetzt wahrscheinlich Dateien mit Namen, die Zahlen im Arbeitsverzeichnis sind). Dieser Ausschnitt:
[ $Dateigröße > $Größe ]
sollte sein
[ "$filesize" -gt "$size" ]
UndVerwenden Sie doppelte Anführungszeichen um Variablensubstitutionen und Befehlssubstitutionen.
Antwort2
Es ist nicht nötig, Datentypen zu „konvertieren“. Sie können -gt
oder verwenden -lt
, um Zahlen zu vergleichen:
➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 4000 ]] && echo "bigger" || echo "smaller"
bigger
➜ size="$(stat -c%s test.mp4)"; [[ "$size" -gt 400000 ]] && echo "bigger" || echo "smaller"
smaller
Das >
ist grundsätzlich nicht falsch. Sie könnenarithmetische Ausdrückeum den Vergleich durchzuführen.
Ich habe [[
anstelle von verwendet [
für seineErweiterte Funktionen.
Beachten Sie, dass alle Variablenerweiterungen in doppelte Anführungszeichen gesetzt werden müssen. Insbesondere bei $filename
und $path
schlägt Ihr Skript fehl, wenn eine davon Leerzeichen enthält.
Antwort3
Leute, ich habe das Problem gelöst, nachdem ich Folgendes geändert habe:
if ((filesize > size))
Funktioniert jetzt, danke für die Unterstützung