Script Bash converte “string” em número

Script Bash converte “string” em número

preciso alterar uma string para interger, pois verifico o tamanho do arquivo (extrair com: stat -c%s $filename) com um número, siga o 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;

Responder1

Em bash/ shvariáveis ​​contêm strings, não existe um conceito estrito de números inteiros. Uma string pode parecer um número inteiro e é suficiente.

stat -c%s $filenamedeve retornar uma string que se parece com um número inteiro.

No seu caso, o principal problema está no operador de redirecionamento >(provavelmente agora você tem arquivos com nomes que são números no diretório de trabalho). Este trecho:

[$ tamanho do arquivo > $ tamanho]

deveria estar

[ "$filesize" -gt "$size" ]

Euse aspas duplas em substituições de variáveis ​​e substituições de comandos.

Responder2

Não há necessidade de "converter" tipos de dados. Você pode usar -gtou -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

Isso >não está errado em princípio. Você pode usarexpressões aritméticaspara realizar a comparação.

Eu usei [[no lugar de [por seurecursos estendidos.

Observe que todas as expansões de variáveis ​​devem estar entre aspas duplas. Principalmente com $filenamee $path, se algum deles contiver espaços em branco, seu script falhará.

Responder3

Pessoal, resolvi depois de mudar isso:

if ((filesize > size))

Agora trabalhe, obrigado pelo apoio

informação relacionada