
Necesito cambiar una cadena a entero, porque verifico el tamaño del archivo (extraer con: stat -c%s $filename) con un número, sigo el script completo:
#!/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;
Respuesta1
En bash
/ sh
las variables contienen cadenas, no existe un concepto estricto de números enteros. Una cadena puede parecer un número entero y es suficiente.
stat -c%s $filename
debería devolver una cadena que parezca un número entero.
En su caso, el principal problema está en el operador de redirección >
(probablemente ahora tenga archivos con nombres que son números en el directorio de trabajo). Este fragmento:
[ $tamaño de archivo > $tamaño ]
debiera ser
[ "$filesize" -gt "$size" ]
Yuse comillas dobles alrededor de sustituciones de variables y sustituciones de comandos.
Respuesta2
No es necesario "convertir" tipos de datos. Puedes usar -gt
o -lt
para comparar números:
➜ 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
>
En principio, esto no está mal. Puedes usarexpresiones aritméticaspara realizar la comparación.
Lo he usado [[
en lugar de [
por sucaracterísticas extendidas.
Tenga en cuenta que todas las expansiones de variables deben estar entre comillas dobles. Particularmente con $filename
y $path
, si alguno de ellos contiene espacios en blanco, su secuencia de comandos fallará.
Respuesta3
Chicos, lo resolví después de cambiar esto:
if ((filesize > size))
Ahora trabajo, gracias por el apoyo.