|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Feb 2001
Messaggi: 824
|
script per eseguire lo stesso comando su ogni file f in una directory.
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!!
__________________
Il Poeta assomiglia a questo principe // Dei nembi, che frequenta la tempesta // E ride dell'arciere; a lui, esiliato // Sulla terra, fra gli schiamazzi, le ali // Da gigante impediscono il cammino. (Baudelaire - l'albatro) |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 1187
|
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 |
![]() |
![]() |
![]() |
#3 |
Bannato
Iscritto dal: Feb 2000
Città: The city of wasting disease
Messaggi: 7389
|
la butto li, non lo provo neanche... ma qualcosa del genere dovrebbe funzionare credo (almeno con zsh, con bash non saprei)
Codice:
for dir in *; cd $dir && for file in *; jar -x f $file; cd .. boh... in bocca al lupo ![]() (ovviamente devi eseguirlo dalla dir lib, poi lui in teoria va a cercarsi le varie directory e scompatta i file .jar... |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Feb 2001
Messaggi: 824
|
Codice:
[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]$ ![]() cmq i file jar da scompattare sono tutti nella stessa directory
__________________
Il Poeta assomiglia a questo principe // Dei nembi, che frequenta la tempesta // E ride dell'arciere; a lui, esiliato // Sulla terra, fra gli schiamazzi, le ali // Da gigante impediscono il cammino. (Baudelaire - l'albatro) |
![]() |
![]() |
![]() |
#5 | |
Bannato
Iscritto dal: Feb 2000
Città: The city of wasting disease
Messaggi: 7389
|
Quote:
allora è facile, entra in quella directory e fai for file in *; jar -x f $file; (sempre usando zsh e non bash) |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Feb 2001
Messaggi: 824
|
zsh? cos'è?
![]() ![]() 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?
__________________
Il Poeta assomiglia a questo principe // Dei nembi, che frequenta la tempesta // E ride dell'arciere; a lui, esiliato // Sulla terra, fra gli schiamazzi, le ali // Da gigante impediscono il cammino. (Baudelaire - l'albatro) |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Jul 2003
Messaggi: 209
|
Correzione
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 {} \;
__________________
------------------------------------- Fletto i muscoli e sono nel vuoto ------------------------------------ |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Dec 2000
Messaggi: 1187
|
non so perche` ma da me va senza virgolettare l'asterisco bho!
|
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Jun 2003
Città: Genova
Messaggi: 5676
|
mi sa che io sono un pò più lamer degli altri
![]() 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! Codice:
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 ![]() ciao |
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Feb 2001
Messaggi: 824
|
eccolo, semplice semplice (grazie arpeda!):
for F in `ls *.jar`; do jar -xvf $F; done
__________________
Il Poeta assomiglia a questo principe // Dei nembi, che frequenta la tempesta // E ride dell'arciere; a lui, esiliato // Sulla terra, fra gli schiamazzi, le ali // Da gigante impediscono il cammino. (Baudelaire - l'albatro) |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:09.