2012-04-21 4 views
5

Ho un gruppo di file in una directory tutti chiamati AAAA_MM_GGRun script di shell per ogni file nella directory

-rw-r--r-- 1 root root 480K Apr 21 13:17 2012_04_05 
-rw-r--r-- 1 root root 483K Apr 21 13:17 2012_04_06 
-rw-r--r-- 1 root root 484K Apr 21 13:17 2012_04_07 
-rw-r--r-- 1 root root 480K Apr 21 13:17 2012_04_08 
-rw-r--r-- 1 root root 344K Apr 21 13:17 2012_04_09 
-rw-r--r-- 1 root root 66K Apr 21 13:17 2012_04_10 
-rw-r--r-- 1 root root 461K Apr 21 13:17 2012_04_11 
-rw-r--r-- 1 root root 475K Apr 21 15:09 2012_04_17 
-rw-r--r-- 1 root root 480K Apr 21 15:10 2012_04_18 
-rw-r--r-- 1 root root 474K Apr 21 15:10 2012_04_19 
-rw-r--r-- 1 root root 474K Apr 21 15:10 2012_04_20 

Ho uno script di shell che accetta un file come un paramater e calcola i dati in base ai dati in il file, io chiamo lo script come questo

sh Calculate.sh MyFile 

Voglio eseguire questo script di shell per ogni file in questa directory.

Come potrei fare, xargs ??

+0

Il comando 'find' sarà probabilmente un buon inizio. Qui ci sono alcune risorse: http://www.grymoire.com/Unix/Find.html e http://mywiki.wooledge.org/UsingFind (diventa molto più complicato, ma vale la pena dare un'occhiata ad un certo punto). – Telemachus

risposta

5

Hai provato il comando find con l'esecuzione?

mio campione sarà eco i file, ma è possibile chiamare uno script di shell con il nome del file come parametro

find . -maxdepth 1 -type f -exec echo {} \; 
+0

Questo è bello, ma come faccio a passare i file al mio script Calculate.sh in ??? –

+2

Ok .. in tal caso è necessario ordinare tutti i file prima di chiamare lo script. Prova qualcosa come questo 'find. -maxdepth 1 -tipo f | ordinare | xargs -I '{}' Calculate.sh '{}' ' – MrJames

+0

Capisco il comando fino a xargs, capisco che ordina i dati in xargs, qual'è l'opzione -I e perché ci sono due di '{}'? ? Grazie molto. –

1

find . -maxdepth 1 -type f | xargs -n 1 -I % Calculate.sh %

3

Un semplice ciclo for nella shell:

for file in *; do sh Calculate.sh "$file"; done 
+0

Questo non lo potrebbe eseguire anche se Calculate.sh fosse nella stessa directory? – ale10ander

+1

sì, lo farebbe. Per evitare che, con bash, eseguire il loop su tutti i file * non * denominati Calculate.sh: 'shopt extglob nullglob; per file in! (Calculate.sh) ' –

1
./Calculate.sh 2012_04_{05..20}