
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
/ sh
variá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 $filename
deve 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 -gt
ou -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
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 $filename
e $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