Selles õpetuses käsitletakse kiireid meetodeid, mida saate bash -skriptis kasutada failisuuruse saamiseks määratud vormingus, näiteks baitides, kilobaitides, megabaitides või gigabaitides.
Meetod: käsk ls
Esimene meetod on kasutada vana head käsku ls. Teiste käskudega sidudes saab käsk ls haarata faili suuruse.
Skripti rakendamiseks vajame faili täielikku teed, loetleme failiteabe ls -ga ja võtame suuruse käsuga, näiteks awk.
Selle skripti näidis näeb välja selline:
#!/bin/bash
viskas välja 'Sisestage faili täielik tee.'
loe faili
failisuurus= $(ls -lh $ fail | awk „{print $ 5}”)
viskas välja '$ failsuurus on$ failisuurust'
Ülaltoodud skript on suhteliselt lihtne. Kasutades käsku kaja ja lugemine, saame faili täieliku tee nime.
Järgmisena kasutame käsku ls -lh, et loetleda kõik kataloogid ja suurus inimesele loetavas vormingus, ning lõpuks edastame väljundi awk -le ja võtame suuruseks 5thmuutuja.
Järgnev on stsenaariumi illustratsioon.
chmod +x suurus.sh./suurus.sh
Siin on selle väljund:
sudo ./size.shSisestage faili täielik tee
/etc/passwd
/etc/passwd suurus on 2,9K
Meetod: käsk wc
Teine meetod, mille abil saame bash -skriptis faili suurust haarata, on käsk wc. Käsk wc tagastab sõnade arvu, suuruse ja faili suuruse baitides.
Nüüd:
Nagu teate, pole faili suuruse lugemine baitides väga lihtne. Selle vastu võitlemiseks saame rakendada lihtsa menüü ja küsida kasutajalt suuruse vormingut, näiteks KB, MB ja GB.
Sõltuvalt valitud vormingust teisendame baidid nimetatud vormingusse.
Siin on näite skript sellise loogika rakendamiseks:
#!/bin/bashviskas välja 'Valige suuruse vorming, kasutage arvväärtusi (1 baitide jaoks, 2 kilobaitide jaoks jne)'
viskas välja '''
1. Baiti
2. Kilobaiti
3. Megabaiti
4. Gigabaiti
'''
viskas välja '************************************************ ********************** '
loevormingus
viskas välja 'Sisestage sihtfaili täielik tee:'
loe faili
failisuurus= $(tualett -c $ fail | awk „{print $ 1}”)
kui [[('$ vormingus'==1)]];
siis
viskas välja '$ failon u$ failisuurustBaiti
elif [[('$ vormingus'==2)]];
siis
u= $(bc <<<'skaala = 3;$ failisuurust/ 1024 ')
viskas välja '$ failon ligikaudu$ kbKB '
elif [[('$ vormingus'==3)]];
siis
mb= $(bc <<<'skaala = 6;$ failisuurust/ 1048576 ')
viskas välja '$ failon ligikaudu$ mbMB '
elif [[('$ vormingus'==4)]];
siis
gb= $(bc <<<'skaala = 12;$ failisuurust/ 1073741824 ')
viskas välja '$ failon ligikaudu$ GBGB '
muidu
viskas välja 'Vale vorming.'
väljumine
olla
Ülaltoodud skripti puhul palume kasutajal sisestada failisuuruse vorming. Bash loeb seda sisendit ja salvestab selle vormingu muutujale.
Seejärel palume kasutajal failitee ja salvestame selle muutuja faili.
Järgmine samm kutsub määratud faili käsku wc -c. Kuna wc -c tagastab faili suuruse baitides ja faili tee, kasutame AWK abil ainult faili suurust. Salvestame suuruse baitides failisuuruses.
Lõpuks rakendame lihtsa if -avalduse, et kontrollida, kas suuruse formaat on 1 (baiti), 2 (kilobaiti), 3 (megabaiti), 4 (gigabaiti). Seejärel kasutame käsku bc faili suuruse teisendamiseks baitides määratud vormingusse.
MÄRGE: Me kasutame käsu bc jaoks erinevat skaalat, et arvestada kümnendkohtade arvu hindamise kohta.
Alloleval pildil on näha, kuidas skript töötab.
TEINE MÄRKUS : Ülaltoodud skript on puhas paljaste luudega ja on seetõttu avatud olulistele täiustustele. Parandage seda julgelt ja kohandage seda vastavalt oma vajadustele.
3. meetod: käsu stat kasutamine
Me ei saa unustada stat käsku. Kasutades käsku stat, saame kuvada üksikasjalikku teavet faili või failisüsteemi kohta.
Käsk stat tagastab ka suuruse baitides. Vormingu valimiseks saate ülaltoodud skriptis kasutada sarnast loogikat.
Siin on lihtne skript, mis kasutab käsku stat:
#!/bin/bashviskas välja 'Sisestage faili tee.'
loe faili
failisuurus= $(osariik -c %s$ fail)
viskas välja '$ failon täpne$ failisuurustbaiti. '
Lõpus
Selles õpetuses on arutatud kolme meetodit, mille abil saate faili suuruse saada bash -skripti abil. Hea on märkida, et Linuxil on selle saavutamiseks ulatuslik tööriistade ja meetodite kogum. Leidke see, mis teile sobib, ja pidage sellest kinni.