Programmazione bash

>Non si direbbe ma... si`, sono ancora vivo!! ;-P
>Dopo un lungo periodo di silenzio (ma di costante lettura) torno a postare...

ciao! bentornato :-)

>Ecco il problema: sto scrivendo uno script per semplificare la
>masterizzazione di cd audio; questo script deve effettuare tre operazioni:
>- verificare che ci sia abbastanza spazio su disco
>- estrarre tutte le tracce audio dal cd (cdparanoia -B)
>- masterizzare il nuovo cd (cdrecord -v -eject ... )
>Il problema sta proprio nella prima: pensavo di estrarre dall'output del
>comando df lo spazio libero, ma... come si fa in bash?
>L'output di df e` una serie di righe di questo genere, una per ogni device
>montato:
>
>/dev/hda5             1.4G  155M  1.2G  11% /mnt/win_d

in bash non so :-\
ti propongo una mia soluzione con il python,
dato che e' un linguaggio che si adatta ad
essere usato per piccoli script.
Preciso che il python e' da poco che lo sto guardando,
percio' molto probabilmente esiste una soluzione alternativa
a quella che ti propongo, piu' veloce e piu' elegante...
..cmq questo e' il listato:


----------------------------begin master.py ---------------------------------
#!/usr/bin/env python

# importa i moduli che ci servono
import os
import string
import commands

#cattura l'output del comando df e lo memorizza in una stringa
out=commands.getoutput('df -h')  

#crea una lista contenente le righe di out
righe=string.split(out,'\n')

#copio la seconda riga quella che mi interessa
# questa: /dev/hda5             1.4G  155M  1.2G  11% /mnt/win_d
riga=righe[1]

# crea una lista contenente le singole parole della stringa riga
dati=string.split(riga)

#prelevo la quarta parola cioe'  "1.2G"
spaziolibero=dati[3]

#prelevo l'ultimo carattere della stringa spaziolibero cioe' la G
lettera=spaziolibero[-1]

# trasformo la parola in un int e le tolgo l'ultimo carattere, ovvero la 'G'
spaziolibero=int(spaziolibero[:-1])

# se sono giga li trasformo in mega
if lettera=='G':
        spaziolibero=spaziolibero*1000

if spaziolibero >= 650:
    print "spazio su HD sufficiente:  %d" % spaziolibero
    
    # lancio i comandi per masterizzare
    os.system('cdparanoia -B')
    os.system('cdrecord -v -eject ....') 
    #...
    # altri comandi...
    #...

else:
    print "spazio su HD insufficiente:  %d" % spaziolibero

---------------------------end master.py --------------------------------

anche se non sai python, il listato non e' difficile,
cmq cerco di spiegartelo meglio:

la funzione "split" del modulo "string" ritorna una lista
contenete delle sottostringhe della stringa che le passi come parametro

la lista altro non e' che un oggetto che contiene 
una lista (appunto) di valori,
ai vari valori si puo' accedere con un indice 
(come in C gli indici partono dallo zero)
es: 
lista=['a','b','c']
print lista[1]

stampera' b

il secondo parametro di "split" e' facoltativo
e contiente il carattere (o caratteri) che separano le stringhe
che saranno messe nella lista, se non viene usato "split"
ritorna una lista delle parole contenute nella stringa passata come parametro

con "os.system('comando')" puoi richiamare un comando esterno a python

-----------------
in realta' un altro metodo per sapere la dimensione dello spazio libero lo 
conosco ed e' questo:

---------------------------spazio.py------------------------------------
#!/usr/bin/env python

import statvfs
import os

#restituisce informazioni sul file system, statvfs("percorso")
s = os.statvfs("/") 

#numero blocchi liberi
blocchi=s[statvfs.F_BFREE]

# dimensione dei blocchi
dim=s[statvfs.F_FRSIZE]

spaziolibero=blocchi*dim

print spaziolibero

------------------------------end spazio.py -------------------------------

pero' il valore non coincide con il valore trovato con il comando df
(almeno sul mio pc)......
su questa cosa non ti so dire di piu', cerchero' di capire il perche'

Spero di esserti stato di aiuto e di non avere sparato cazzate,

ciao :-)

Max


Other related posts: