script per shell

Discussioni sui sistemi operativi Unix like, con un occhio di riguardo per Linux.

Moderatori: cb_123, thrantir, netvandal, CaberNET54

script per shell

Messaggiodi `knives` il 21 lug 2006, 19:03

pensavo.... perchè non imbastiamo un piccolo tutorial sullo script per shell linux e creiamo un piccolo archivio dei nostri script che abbiamo scritto?

per esempio.. io ora sto scrivendo uno script che ricerca i file duplicati in una o piu cartelle

Codice: Seleziona tutto
#!/bin/bash/
FILE_MD5SUM=elenco_md5sum;
FILE_DOPPI=elenco_doppi;
path=${1-"`pwd`/"};
for file in *
do
md5sum "$path""$file"
done | sort >> "$FILE_MD5SUM"

if [ "$a" ==  "$b" ]
then
   rm

exit 0;




come si vede non è finito. mi manca la parte piu difficile.. cioè l'eliminazione dei file ridondanti.
io pensavo di farlo cosi:

mi creo l'elenco di tutti i file presenti nella cartella, per ogniuno calcolo il suo md5sum e lo salvo in un file, ovviamente.. calcolando md5sum i file possono avere nomi diversi.. estensioni diverse.. ma se sono identici i valori del md5, i file sono identici, quindi.. elimino tutti i file tranne uno per ogni file.

la parte facile l ho scritta, quella difficile è eliminare tutte i file ridondanti tranne 1, ma come fare per fare questo?
pensavo.. se io lavoro sul file, mi creo un secondo file dove scrivo tutti i file stando attento che ci siano una sola volta, e dopo di che cancello tutto quello che è rimasto li.

che ne pensate?
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

 

Messaggiodi `knives` il 21 lug 2006, 21:03

Codice: Seleziona tutto
#!/bin/bash/
FILE_UNICI=elenco_unici;
FILE_DOPPI=elenco_doppi;
FILE_INDICE=elenco_somma_filename;
FILE_ELIMINARE=elenco_da_eliminare;

path=${1-"`pwd`/"};
for file in *
do
md5sum "$path""$file"
done | sort >> "$FILE_INDICE"
#num_file="cat $FILE_INDICE |wc -l"
cut -b 1-32 $FILE_INDICE >> $FILE_DOPPI;
uniq $FILE_DOPPI $FILE_UNICI;
diff $FILE_DOPPI $FILE_UNICI >> $FILE_ELIMINARE

exit 0;


per oggi mi fermo qui. ovviamente chi ha una partizione di linux lo puo provare.. e vedere cosa fa, basta copiare questo testo incollarlo in un file di testo e rinominarlo in .sh e poi dalle proprieta del file, dargli i permessi di esecuzione.


ps. sarebbe interessante se chi ha una qualunque distro di linux installata, funzionante e utilizzata.. posti qualche idea su cui lavorare, se ne ha bisogno ovvio :)
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi `knives` il 22 lug 2006, 00:57

Codice: Seleziona tutto
#!/bin/bash/
FILE_UNICI=elenco_unici;
FILE_DOPPI_MD5SUM=elenco_doppi_md5sum;
FILE_INDICE=elenco_somma_filename;
FILE_ELIMINARE=elenco_da_eliminare;
FILE_DOPPI_FILENAME=elenco_doppi_filename;
APPOGGIO=appoggio;

path=${1-"`pwd`/"};
for file in *
do
md5sum "$path""$file"
done | sort >> "$FILE_INDICE"
#num_file="cat $FILE_INDICE |wc -l"
cut -b 1-32 $FILE_INDICE >> $FILE_DOPPI_MD5SUM;
cut -b 35-200 $FILE_INDICE >> $FILE_DOPPI_FILENAME;
uniq $FILE_DOPPI_MD5SUM $FILE_UNICI ;
diff $FILE_UNICI $FILE_DOPPI_MD5SUM  >> $FILE_ELIMINARE;
cut -b 3-35 $FILE_ELIMINARE >> $APPOGGIO;
rm $FILE_ELIMINARE;
cat $APPOGGIO >> $FILE_ELIMINARE;

exit 0;


questo qui è quasi completo.. mi manca solo di riuscire a risalire al nome del file, per fare questo, devo confrontare ogni linea del file elenco_da_eliminare con elenco_somma_filename, ogni volta che trova una stringa uguale.. mi restituisce il percorso del file cosi da cancellarlo.
e passa al prox...

solo che non so codificarla questa cosa qui :lol:
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi Ghost il 22 lug 2006, 13:42

bellina come idea, appena torno di nuovo con linux (hdd troppo piccolo) vedo di buttare giù qualcosa ank'io ^_^
Dfi-Ultra-D - Sandy 3700+@ 3.05ghz 1.39v daily - 2X512 Ballistix Tracer 273 2.5-3-3-8, hdd p-ata 40gb + sistema scsi u320 18.2gb 150000rpm, controller 29160N....x600pro - audigy x-fi - ybris k9 + keops 650 + dual gioma 1600.
278.8 cas 1.5-2-2-0..grazie BH-5

saturday's Overclockers team [bigsmile]
Avatar utente
Ghost
AmdPlanet Guru
AmdPlanet Guru
 
Messaggi: 6283
Iscritto il: 14 set 2004, 16:36
Località: Palermo

Messaggiodi `knives` il 22 lug 2006, 14:41

Codice: Seleziona tutto
#!/bin/bash/
FILE_UNICI=elenco_unici;
FILE_DOPPI_MD5SUM=elenco_doppi_md5sum;
FILE_INDICE=elenco_somma_filename;
FILE_ELIMINARE=elenco_da_eliminare;
FILE_DOPPI_FILENAME=elenco_doppi_filename;
APPOGGIO=appoggio;

path=${1-"`pwd`/"};
for file in *
do
md5sum "$path""$file"
done | sort >> "$FILE_INDICE"
#num_file="cat $FILE_INDICE |wc -l"
cut -b 1-32 $FILE_INDICE >> $FILE_DOPPI_MD5SUM;
#cut -b 35-200 $FILE_INDICE >> $FILE_DOPPI_FILENAME;
uniq $FILE_DOPPI_MD5SUM $FILE_UNICI ;
diff $FILE_UNICI $FILE_DOPPI_MD5SUM  >> $FILE_ELIMINARE;
cut -b 3-35 $FILE_ELIMINARE >> $APPOGGIO;
rm $FILE_ELIMINARE;
cat $APPOGGIO >> $FILE_ELIMINARE;
rm $APPOGGIO
vettore_md5sum_eliminare=( `cat $FILE_ELIMINARE` )
conta_elementi=${#vettore_md5sum_eliminare[@]}
echo $conta_elementi
i=0;
for i in $conta_elementi;
do
   grep ${#vettore_md5sum_eliminare[i]} $FILE_INDICE >> $APPOGGIO;
   i=$((i+1));
done
cut -b 35-300 $APPOGGIO >> $FILE_DOPPI_FILENAME
mkdir doppi
#vettore_doppi_filename=(`cat $FILE_DOPPI_FILENAME`)
j=1;
for file in *;
do
   strings $FILE_DOPPI_FILENAME >> vettore_doppi_filename[$j]
#   mv "" "$path"doppi/;
   j=$((j+1));
done
exit 0;


okkkk cè l ho fatta!

cioè.... non mi libera spazio.. xo è in grado di riempire tutto il disco di schifezze, si ok.. doveva fare il contrario.. vah beh.. lo usero come virus.. :lol:
son contento che la mia idea sia piaciuta.. solo che.. o tutti han gia i programmi pronti.. o nessuno usa linux :lol:
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi cb_123 il 22 lug 2006, 17:42

Penso la seconda che hai detto. :lol:

Ma non sei riuscito a far cancellare i file doppi?
Si st@
come d'@utunno,
sui vi@li
le putt@ne.

World Community Grid AMD Planet Team
Avatar utente
cb_123
Moderatore
Moderatore
 
Messaggi: 8168
Iscritto il: 26 gen 2002, 17:54
Località: Val di Sole

Messaggiodi `knives` il 22 lug 2006, 18:00

cb_123 ha scritto:Penso la seconda che hai detto. :lol:

Ma non sei riuscito a far cancellare i file doppi?

no..
devo trovare il comando giusto.. o riuscire a passare un file alla volta agli argomenti del mv
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Messaggiodi thrantir il 22 lug 2006, 21:42

ottima idea... appena ricollego i neuroni do un'occhiata allo script :D
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Messaggiodi Ghost il 23 lug 2006, 14:32

`knives` ha scritto:cioè.... non mi libera spazio.. xo è in grado di riempire tutto il disco di schifezze, si ok.. doveva fare il contrario.. vah beh.. lo usero come virus.. :lol:

spettacolo [bigsmile]
Dfi-Ultra-D - Sandy 3700+@ 3.05ghz 1.39v daily - 2X512 Ballistix Tracer 273 2.5-3-3-8, hdd p-ata 40gb + sistema scsi u320 18.2gb 150000rpm, controller 29160N....x600pro - audigy x-fi - ybris k9 + keops 650 + dual gioma 1600.
278.8 cas 1.5-2-2-0..grazie BH-5

saturday's Overclockers team [bigsmile]
Avatar utente
Ghost
AmdPlanet Guru
AmdPlanet Guru
 
Messaggi: 6283
Iscritto il: 14 set 2004, 16:36
Località: Palermo

Messaggiodi `knives` il 24 lug 2006, 23:32

Codice: Seleziona tutto
#!/bin/bash/
FILE_UNICI=elenco_unici;
FILE_DOPPI_MD5SUM=elenco_doppi_md5sum;
FILE_INDICE=elenco_somma_filename;
FILE_ELIMINARE=elenco_da_eliminare;
FILE_DOPPI_FILENAME=elenco_doppi_filename;
APPOGGIO=appoggio;

path=${1-"`pwd`/"};
`cd $path`
rm $FILE_UNICI $FILE_DOPPI_MD5SUM $FILE_INDICE $FILE_ELIMINARE $APPOGGIO $FILE_DOPPI_FILENAME;
rm doppi;
for file in *
do
md5sum "$path""$file"
done | sort >> "$FILE_INDICE"
#num_file="cat $FILE_INDICE |wc -l"
cut -b 1-32 $FILE_INDICE >> $FILE_DOPPI_MD5SUM;
#cut -b 35-200 $FILE_INDICE >> $FILE_DOPPI_FILENAME;
uniq $FILE_DOPPI_MD5SUM $FILE_UNICI ;
diff $FILE_UNICI $FILE_DOPPI_MD5SUM  >> $FILE_ELIMINARE;
cut -b 3-35 $FILE_ELIMINARE >> $APPOGGIO;
rm $FILE_ELIMINARE;
cat $APPOGGIO >> $FILE_ELIMINARE;
rm $APPOGGIO
vettore_md5sum_eliminare=( `cat $FILE_ELIMINARE` );
conta_elementi=${#vettore_md5sum_eliminare[*]};
#echo $conta_elementi;
i=0;
for i in $conta_elementi;
do
   grep ${#vettore_md5sum_eliminare[i]} $FILE_INDICE >> $APPOGGIO;
   i=$((i+1));
done
conta_elementi=0;
cut -b 35-300 $APPOGGIO >> $FILE_DOPPI_FILENAME
mkdir doppi
vettore_doppi_filename=( `cat $FILE_DOPPI_FILENAME` );
conta_eliminare=${#vettore_doppi_filename[*]};
echo $conta_eliminare
i=0;
#for i in $conta_eliminare;
#do

while[ "$i" -le "$conta_eliminare" ]
do
   echo "$i";
   i=$((i+1));
done
exit 0;


devo pensarci su.. non riesco a completarlo.. questo qui è quasi completo.. ormai l'elenco è creato.. mi basterebbe riuscire a cancallare i file(nel mio caso spostarli nella cartella doppi)
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

 

Torna a Linux e Unix

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite