El script Bash convierte "cadena" en número

El script Bash convierte "cadena" en número

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/ shlas 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 $filenamedeberí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 -gto -ltpara 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 $filenamey $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.

información relacionada