Hoe de grootte van een bestand in een bash-script te krijgen

How Get Size File Bash Script



Bij het schrijven van shellscripts kunnen we een situatie tegenkomen waarin we de grootte van een bestand moeten weten. U moet deze grootte bijvoorbeeld mogelijk gebruiken om andere acties uit te voeren, zoals het bestand naar een andere map verplaatsen of verwijderen.

In deze zelfstudie worden snelle methoden besproken die u in een bash-script kunt gebruiken om de bestandsgrootte in de opgegeven indeling te krijgen, zoals bytes, kilobytes, megabytes of gigabytes.







Methode 1: De opdracht ls

De eerste methode is om het goede oude ls-commando te gebruiken. In combinatie met andere opdrachten kan de opdracht ls de grootte van een bestand overnemen.



Om het script te implementeren, hebben we het volledige pad van het bestand nodig, geven we de bestandsinformatie weer met ls en nemen we de grootte met behulp van een commando zoals awk.



Een voorbeeldscript daarvoor ziet er als volgt uit:





#!/bin/bash
gooide uit 'Voer het volledige pad naar het bestand in.'
lezen het dossier
bestandsgrootte= $(ls -lh $bestand | awk '{druk $ 5}')
gooide uit '$bestandheeft een grootte van$bestandsgrootte'

Bovenstaand script is relatief eenvoudig. Met behulp van het echo- en leescommando krijgen we de naam van het volledige pad van het bestand.

Vervolgens gebruiken we de opdracht ls -lh om alle mappen en de grootte weer te geven in een voor mensen leesbaar formaat, en ten slotte geven we de uitvoer door aan awk en pakken we de grootte als de 5evariabel.



Het volgende is een illustratie van het script.

chmod +x size.sh
./maat.sh

Hier is de output daarvoor:

sudo ./size.sh
Voer het volledige pad naar het bestand in
/etc/passwd
/etc/passwd heeft een grootte van 2,9K

Methode 2: De wc-opdracht

Een andere methode die we kunnen gebruiken om de grootte van een bestand in een bash-script te bepalen, is het wc-commando. Het wc-commando retourneert het aantal woorden, de grootte en de grootte van een bestand in bytes.

Nutsvoorzieningen:

Zoals u weet, is het lezen van de bestandsgrootte in bytes niet erg eenvoudig. Om dit tegen te gaan, kunnen we een eenvoudig menu implementeren en de gebruiker het grootteformaat vragen, zoals KB, MB en GB.

Afhankelijk van het geselecteerde formaat, zullen we de bytes converteren naar dat formaat.

Hier is een voorbeeldscript om dergelijke logica te implementeren:

#!/bin/bash
gooide uit 'Selecteer formaat formaat, gebruik numerieke waarden (1 voor Bytes, 2 voor Kilobytes, etc.)'
gooide uit '''
1. Bytes
2. Kilobytes
3. Megabytes
4. Gigabytes
'
''
gooide uit '************************************************** * ********************* '
lezenformaat

gooide uit 'Voer het volledige pad naar het doelbestand in: '
lezen het dossier
bestandsgrootte= $(wc -C $bestand | awk '{print $1}')
indien [[('$formaat'==1)]];
dan
gooide uit '$bestandis ongeveer$bestandsgroottebytes'
elif [[('$formaat'==2)]];
dan
ongeveer= $(bc <<<'schaal=3;$bestandsgrootte/ 1024')
gooide uit '$bestandis ongeveer$ kbKB'
elif [[('$formaat'==3)]];
dan
mb= $(bc <<<'schaal=6;$bestandsgrootte/ 1048576 ')
gooide uit '$bestandis ongeveer$ mbMB'

elif [[('$formaat'==4)]];
dan
gb= $(bc <<<'schaal=12;$bestandsgrootte/ 1073741824 ')
gooide uit '$bestandis ongeveer$ gbNL'
anders
gooide uit 'Onjuist formaat.'
Uitgang
zijn

In het bovenstaande script beginnen we met de gebruiker te vragen het formaat van de bestandsgrootte in te voeren. Bash leest deze invoer en slaat deze op in de formaatvariabele.

Vervolgens vragen we de gebruiker om het bestandspad en slaan deze variabele op in een bestand.

De volgende stap roept het wc -c-commando aan op het opgegeven bestand. Aangezien wc -c de bestandsgrootte in bytes en het pad van het bestand retourneert, gebruiken we AWK om alleen de bestandsgrootte te pakken. We slaan de grootte op in bytes als bestandsgrootte.

Ten slotte implementeren we een eenvoudige if-statement om te controleren of het formaat 1 (Bytes), 2 (Kilobytes), 3 (Megabytes), 4 (Gigabyte) is. Vervolgens gebruiken we het bc-commando om de bestandsgrootte in bytes naar het opgegeven formaat te converteren.

OPMERKING: We gebruiken een variabele schaal voor het bc-commando om het aantal decimalen per evaluatie op te vangen.

De afbeelding hieronder laat zien hoe het script werkt.

NOG EEN OPMERKING: : Het bovenstaande script is pure barebones en staat daarom open voor aanzienlijke verbeteringen. Voel je vrij om het te verbeteren en aan te passen aan je behoeften.

Methode 3: stat-opdracht gebruiken

We mogen het stat-commando niet vergeten. Met de opdracht stat kunnen we gedetailleerde informatie over een bestand of het bestandssysteem weergeven.

De opdracht stat retourneert de grootte ook in bytes. U kunt vergelijkbare logica in het bovenstaande script gebruiken om de indeling te selecteren.

Hier is een eenvoudig script met de opdracht stat:

#!/bin/bash
gooide uit 'Voer het bestandspad in.'
lezen het dossier
bestandsgrootte= $(staat -C %s$bestand)
gooide uit '$bestandis nauwkeurig$bestandsgroottebytes.'

tot slot

In deze zelfstudie zijn drie methoden besproken die u kunt gebruiken om de grootte van een bestand te krijgen met behulp van een bash-script. Het is goed om op te merken dat Linux een uitgebreide verzameling tools en methoden heeft om dit te bereiken. Zoek degene die voor u werkt en blijf daarbij.