Como obter o tamanho de um arquivo em um script de bash

Como obter o tamanho de um arquivo em um script de bash
Ao escrever scripts de shell, podemos encontrar uma situação em que precisamos saber o tamanho de um arquivo. Por exemplo, pode ser necessário usar esse tamanho para executar outras ações, como mover o arquivo para um diretório diferente ou excluí -lo.

Este tutorial discutirá métodos rápidos que você pode usar em um script bash para obter o tamanho do arquivo no formato especificado, como bytes, kilobytes, megabytes ou gigabytes.

Método 1: O comando LS

O primeiro método é usar o bom e velho comando ls. Quando combinado com outros comandos, o comando ls pode pegar o tamanho de um arquivo.

Para implementar o script, precisamos do caminho completo do arquivo, listar as informações do arquivo com LS e pegar o tamanho usando um comando como awk.

Um script de amostra para isso ficaria assim:

#!/BIN/BASH
eco "insira o caminho completo para o arquivo."
Leia o arquivo
filesize = $ (ls -lh $ file | awk 'print $ 5')
eco "$ arquivo tem um tamanho de $ fileSize"

O script acima é relativamente simples. Usando o comando Echo e Read, obtemos o nome do caminho completo do arquivo.

Em seguida, usamos o comando LS -LH para listar todos os diretórios e o tamanho em formato legível por humanos e, finalmente, passar a saída para Awk e pegar o tamanho como o 5º variável.

A seguir é uma ilustração do script.

Tamanho Chmod +X.sh
./tamanho.sh

Aqui está a saída para isso:

sudo ./tamanho.sh
Insira o caminho completo para o arquivo
/etc/passwd
/etc/passwd tem um tamanho de 2.9K

Método 2: o comando WC

Outro método que podemos usar para pegar o tamanho de um arquivo em um script bash é o comando WC. O comando WC retorna o número de palavras, tamanho e tamanho de um arquivo em bytes.

Agora:

Como você sabe, ler o tamanho do arquivo em bytes não é muito fácil. Para combater isso, podemos implementar um menu simples e perguntar ao usuário o formato de tamanho como KB, MB e GB.

Dependendo do formato selecionado, converteremos os bytes para o referido formato.

Aqui está um exemplo de script para implementar essa lógica:

#!/BIN/BASH
eco "Selecionar formato de tamanho, use valores numéricos (1 para bytes, 2 para kilobytes, etc.) "
eco "" "
1. Bytes
2. Kilobytes
3. Megabytes
4. Gigabytes
"" "
eco "************************************************** ************************ "
Leia o formato
eco "Digite o caminho completo para o arquivo de destino:"
Leia o arquivo
filesize = $ (wc -c $ file | awk 'print $ 1')
se [[("$ format" == 1)]];
então
eco "o arquivo $ é aprox $ fileSize bytes"
elif [[("$ format" == 2)]];
então
KB = $ (BC <<<"scale=3; $filesize / 1024")
eco "o arquivo $ é aproximadamente $ kb kb"
elif [[("$ format" == 3)]];
então
MB = $ (BC <<<"scale=6; $filesize / 1048576")
eco "o arquivo $ é aproximadamente $ MB MB"
elif [[("$ format" == 4)]];
então
GB = $ (BC <<<"scale=12; $filesize / 1073741824")
eco "o arquivo $ é aproximadamente $ GB GB"
outro
eco "formato incorreto."
saída
fi

No script acima, começamos pedindo ao usuário que insira o formato do tamanho do arquivo. Bash lê essa entrada e a armazena na variável de formato.

Em seguida, solicitamos ao usuário o caminho do arquivo e armazenamos essa variável em um arquivo.

A próxima etapa chama o wc -c -command no arquivo especificado. Como o WC -C retorna o tamanho do arquivo em bytes e o caminho do arquivo, usamos awk para pegar apenas o tamanho do arquivo. Armazenamos o tamanho em bytes como tamanho do arquivo.

Finalmente, implementamos uma instrução IF simples para verificar se o formato de tamanho é 1 (bytes), 2 (Kilobytes), 3 (megabytes), 4 (Gigabyte). Em seguida, usamos o comando bc para converter o tamanho do arquivo em bytes no formato especificado.

OBSERVAÇÃO: Utilizamos uma escala de variância para o comando BC para acomodar o número de decimais por avaliação.

A imagem abaixo mostra como o script funciona.

Outra nota: O script acima é puro e, portanto, está aberto a melhorias significativas. Sinta -se à vontade para melhorá -lo e ajustá -lo às suas necessidades.

Método 3: Usando o comando de stat

Não podemos esquecer o comando de estatística. Usando o comando stat, podemos exibir informações detalhadas sobre um arquivo ou o sistema de arquivos.

O comando STAT retorna o tamanho em bytes também. Você pode usar lógica semelhante no script acima para selecionar o formato.

Aqui está um script simples usando o comando stat:

#!/BIN/BASH
eco "Digite o caminho do arquivo."
Leia o arquivo
filesize = ”$ (stat -c %s $ arquivo)
eco "o arquivo $ é preciso $ filesize bytes."

Para encerrar

Este tutorial discutiu três métodos que você pode usar para obter o tamanho de um arquivo usando um script bash. É bom observar que o Linux tem uma coleção abrangente de ferramentas e métodos para conseguir isso. Encontre o que funciona para você e fique com ele.