Newsgroup: it.comp.os.linux.iniziare
Titolo: Programma shell

Ciao a tutti .....
c'è un modo per avere in un array la lista delle dir. in un determinato
path tramite un comando per la shell ....
Tanto per farvi capire, vorrei effettuare un tar per ogni dir contenuta
nella mia home ..... bene, il mio problema è automatizzare il sistema in
questo modo:
-**********************-
n = numero dir nella mia home
for i=0 to  n-1 do
 tar ..... dir[i] .....
endfor
-**********************-
P.S. Non guardate la sintassi ....
P.S. Non mi interessano le sottodir .....
Ciao e grazie
-- 
------------------------------------------
Togliere aldruz- per rispondermi via e-mail
------------------------------------------

 nella mia home ..... 
find /la/tua/home -type d -maxdepth 1 -exec tar czf dovelovuoiltrarfile/nome.tar.gz {} \;
man find per maggiori info.
Davide
-- 
| 'Windows for Dummies'; says it all, really. --Gary Barnes 
| 
| 
| 

 -**********************-
Hai praticamente fatto tutto tu , a parte la sintassi.
Copia e incolla quanto segue in un qualsiasi editor:
#! /bin/bash
cd                          # si sposta nella tua home
for i in * ; do             # per ogni file
  if [ -d $i ]; then        # se il file e' una directory
    tar -cjvf $i.tar.bz2 $i # crea un archivio tar e lo bzippa
  fi;
done
Salvalo, dagli i permessi di esecuzione con
  chmod 755 nomefile
e il gioco e' fatto.
Dario Basile
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iD8DBQFAKgax7mRkrRsDl/8RAsuZAJ0eCfqtJGkLjIvuGSf01Ie6c7xS6QCgspxG
whiUdsV0zURYejmBFACTDqA=
=z4Ho
-----END PGP SIGNATURE-----

 for i in * ; do             # per ogni file
Warning: non funziona se la directory contiene spazi nel nome,
in tal caso devi gestire il 'separatore di campo'.
Davide
-- 
| Ignorance is bliss, and when it comes to computing, I want everyone to
| be happy... --Ryan Tucker  
| 
| 

 done
ti ringrazio, cercavo proprio questo .....
Mi togli una curiosità, nel tar che mi hai inserito l'opzione j a cosa
serve? Non l'ho trovata da nessuna parte!
Ciao


 Davide
Azzz... adesso mi studierò anche il "separatore di campo" .... :-O
Al massimo userò il tuo consiglio che mi hai postato prima, che mi sembra
anche questo utile, anche se ho visto che così mi legge anche le dir
nascoste comprese il . e il .. :-( sigh ....
Ciao e grazie ancora ...


 
Ecco detto bene .... e come faccio a gestire i "separatori di campo" se non
ho capito come faccia la shell da una istruzione simile
 for i in * ; do
a prelevare l'elenco dei file/dir ??? Ci sarà una variabile di sistema che
includerà tali info ???
Ciao


 in tal caso devi gestire il 'separatore di campo'.
Ooooops!  ^__^'
Cinque righe di script, sei minuti dal rilascio e gia' il primo
bug! ;-)
La versione 0.2 e' questa:
+-----------------+
#! /bin/bash
CWD=`pwd`
MAINDIR="path assoluto della dir da processare"
ARCHDIR="path assoluto della dir in cui salvare gli archivi"
UTENTE=nome del proprietario degli archivi
GRUPPO=gruppo di UTENTE
cd "$MAINDIR"
for i in * ; do
  if [ -d $i ]; then
    tar -cjvf "$i".tar.bz2 $ARCHDIR/"$i"
  fi;
done
cd "$ARCHDIR"
chown $UTENTE:$GRUPPO *.tar.bz2
cd $CWD
+-----------------+
ChangeLog:
1. [BUGFIX] corretto il famoso "space bug" che impediva il backup
se il nome della directory contiene spazi;
2. e' ora possibile inserire lo script in cron e salvare gli
archivi in un posto diverso dalla directory processata;
3. e' possibile eseguire il backup di una qualunque directory.
TODO:
1. masterizzazione/backup su nastro automatizzati;
2. scelta tra i piu' diffusi formati di archiviazione (tar, tar
bzip2, tar/gzip, zip, ace, rar);
3. invio mail degli archivi;
4. file di configurazione separato;
5. progress bar e ascolto mp3 durante il backup.
- -- 
Dario Basile
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iD8DBQFAKhZs7mRkrRsDl/8RAs1aAKDIwcV5FscmE2pMXkY6i9X/yPwVCACgoaFf
isWsqDikAPV6mAr9SAhaz/A=
=rqGf
-----END PGP SIGNATURE-----

 a prelevare l'elenco dei file/dir ???
La shell legge '*' e lo espande in tutto l'elenco. 'for' legge un
elemento alla volta guardando il 'separatore di campo', che per
default e' uno spazio.
Davide
-- 
| Have you ever noticed that at trade shows Microsoft is always the one 
| giving away stress balls...    -- From a Slashdot.org post 
| 
| 

 filter archive through bzip2, use to decompress .bz2 files
Vedi comunque la versione 0.2, che risolve il famigerato "space
bug". :-)
- -- 
Dario Basile
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iD8DBQFAKhjg7mRkrRsDl/8RAtHJAJ9RI5HSVXXCRXUu/vhWqJ/ieyV12ACffSQU
tpqxCbcvhP7fra5aRaopHOs=
=yic2
-----END PGP SIGNATURE-----

 per default e' uno spazio.
Via, basta, mi avete massacrato abbastanza, neanche fosse un bug
di sicurezza! ;-)
- -- 
Dario Basile
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iD8DBQFAKhsO7mRkrRsDl/8RAilHAKDQjETwLAldmTBQ0oHQjEEMR5DaAQCgw3Ox
T+QcmL7fUVcUovYkMGWJ/Tc=
=kGMW
-----END PGP SIGNATURE-----

 P.S. Non mi interessano le sottodir .....
Quelle vengono incluse per forza durante il tar.
-- 
Enrico Bodo  -  Assistant Professor in Theoretical Chemistry 
University of Rome "La Sapienza" 
Department of Chemistry         

 path tramite un comando per la shell ....
In shell non si parla di "programmi", Si parla di "scripts" ;-)
Ciao,
-- 
       Roberto Divia`             Love at first sight is one of the greatest
       =============             labour-saving devices the world has ever seen.
Mailbox: C02110                 CERN-European Organization for Nuclear Research
E-mail: 
Robert...@cern.ch
           CH-1211 GENEVE 23, Switzerland

 in tal caso devi gestire il 'separatore di campo'.
Ragazzi, ma perche` non usate il while? O direttamente il find?
find . -type d -maxdepth 1 -print | while read i; do
  tar -cjvf "$i.tar.bz2" "$i"
done
find . -type d -maxdepth 1 -exec tar -cjvf "{}.tar.bz2" "{}"
Vi mando un challenge: rifare il tutto in Make.


 Vi mando un challenge: rifare il tutto in Make.
Per accettare una sfida, prima dovrei capirla. Che intendi?
- -- 
Dario Basile
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iD8DBQFAKqCQ7mRkrRsDl/8RAjWPAJ9+TrCD3Q1Z3unDziQkhTNuvApN5QCfdeuZ
mCDWwiVhzD+lgaylWcSl6kU=
=Vs+s
-----END PGP SIGNATURE-----

 default e' uno spazio.
Per default e' spazio, tab oppure ritorno a capo, se non sbaglio.
-- 
Vuoi fare colpo su di lei con me?
Fai colpo su di lei con me! Fai colpo su di lei con me!
[Dr. Gonzo : Paura e delirio a Las Vegas]

 Per accettare una sfida, prima dovrei capirla. Che intendi?
Scrivere un makefile che abbia un target che ottenga lo stesso risultato dello
script. Tipo:
make tars
e quello ti crea i tar files.
Le estensioni del GNU make sono ammesse ;-)


 risultato dello script.
Capito, non saprei da che parte cominciare. :-)
- -- 
Dario Basile
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3 (GNU/Linux)
iD8DBQFAK3gM7mRkrRsDl/8RAqRNAJsHa+VTkjrqZVwYhi/l4Ktp24L9DACgyaPX
w7StrHzMBODQiiu1zLqS0Go=
=7b5q
-----END PGP SIGNATURE-----