View Full Version : script per eseguire lo stesso comando su ogni file f in una directory.
wireless
14-03-2004, 15:55
salve a tutti,
dato che devo scompattare parecchi files jar con delle librerie che mi interessano, onde evitare di scrivere una variabile d'ambiente classpath lunghissimo, volevo scrivere uno script che per ogni file f dentro la directory lib applicasse il comando jar -x f. Mi potete dare una mano, non ho idea di come fare (piuttosto: lo so che sono 3 righe di codice ma se mi metto pure a capire come funziona il linguaggio dello shell, ora, esco pazzo!)
grazie!!
find <percorso> -type f -name <nome> -exec <comando> \;
il percorso e` assoluto o relativo. X partire dalla directory corrente metti il punto .
( Di default prende anche tutti i file nelle subdir ma c'e` anche un parametro x farlo fermare a una certa profondita`. )
" -type f " significa un file normale. tipo d e` una directory, e poi ce n'e` alcuni altri per casi particolari (e` tutto nella manpage di find.)
Nel "-name" si usano gli asterischi come al solito o altri simboli vari.
all'interno del comando di -exec, il nome del file 'attuale' lo rappresenti con " {} "
la barra \ prima del ; finale e` necessaria x passarlo al find evitando l'interpretazione della shell ( ; sarebbe riservato come separatore fra piu` comandi in una riga )
esempio:
find . -type f -name *.txt -exec chmod 644 {} \;
...setta i permessi a 644 ai file txt presenti nella dir. corrente e tutte le subdir
lnessuno
14-03-2004, 16:14
la butto li, non lo provo neanche... ma qualcosa del genere dovrebbe funzionare credo (almeno con zsh, con bash non saprei)
for dir in *; cd $dir && for file in *; jar -x f $file; cd ..
boh... in bocca al lupo :D
(ovviamente devi eseguirlo dalla dir lib, poi lui in teoria va a cercarsi le varie directory e scompatta i file .jar...
wireless
14-03-2004, 16:23
[wireless@pIII800 lib]$ find . -type f -name *.jar -exec jar -x {} \;
find: il percorso deve precedere l'espressione
Uso: find [percorso...] [espressione]
[wireless@pIII800 lib]$
non va....:cry:
cmq i file jar da scompattare sono tutti nella stessa directory
lnessuno
14-03-2004, 16:31
Originariamente inviato da wireless
cmq i file jar da scompattare sono tutti nella stessa directory
allora è facile, entra in quella directory e fai
for file in *; jar -x f $file;
(sempre usando zsh e non bash)
wireless
14-03-2004, 16:34
zsh? cos'è?:eek: :cry:
cmq l tuo comando non va bene perchè lo applica a tutti i file, anche a quelli che ci sono dentro i jar dopo averli scompattati, o sbaglio?
Questo non funziona perche' la shell interpetra l'asterisco (va protetto):
no -> find . -type f -name *.jar -exec jar -x {} \;
si -> find . -type f -name "*.jar" -exec jar -x {} \;
non so perche` ma da me va senza virgolettare l'asterisco bho!
mi sa che io sono un pò più lamer degli altri :D
ma uso questo che mi sono fatto tempo fa con laiuto del forum.
è uno dei miei primi script, ma fà tutto quello che deve fare!
ls *.jpg > /tmp/lista.txt
let counter=1
while read f1
do
ext=.jpg
mv -v $f1 NOME_$counter$ext
let counter=counter+1
done < /tmp/lista.txt
questo rinomina in sequenza tutti i file, ma basta cambiare il comando e il parametro dell'estensione che fà tutto quello che vuoi ;)
ciao
wireless
14-03-2004, 18:26
eccolo, semplice semplice (grazie arpeda!):
for F in `ls *.jar`; do jar -xvf $F; done
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.