2012-04-21 7 views
5

Tengo un montón de archivos en un directorio de todos los YYYY_MM_DD llamadode ejecución para cada archivo en el directorio

-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 

Tengo un script de shell que acepta un archivo como un parámetro de y calcula las cifras se basan en los datos en el archivo, llamo al script como el

sh Calculate.sh MyFile 

Quiero ejecutar este script de shell para cada archivo en este directorio.

¿Cómo voy a hacer esto, xargs?

+0

El comando 'find' probablemente sea un buen comienzo. Aquí hay algunos recursos: http://www.grymoire.com/Unix/Find.html y http://mywiki.wooledge.org/UsingFind (se vuelve mucho más complicado, pero vale la pena verlo en algún momento). – Telemachus

Respuesta

5

¿Has probado el comando find con la ejecución?

mi muestra se hará eco de los archivos, pero se puede llamar a un script con el nombre de archivo como un parámetro

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

Esto es genial, pero ¿cómo les pasaría los archivos a mi script Calculate.sh por orden ??? –

+2

Ok ... en ese caso, debe ordenar todos los archivos antes de llamar al script. Intenta algo como esto 'find. -maxdepth 1-tipo f | ordenar | xargs -I '{}' Calculate.sh '{}' ' – MrJames

+0

Entiendo el comando up to xargs, entiendo que ordenar los datos en xargs, ¿qué es el -I cambiar y por qué hay dos de' {} '? ? Muchas gracias. –

1

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

3

Un simple bucle for de la cáscara:

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

¿No sería esto también ejecutarse en sí mismo si Calculate.sh estuviera en el mismo directorio? – ale10ander

+1

sí, lo haría. Para evitar eso, con bash, pasar por todos los archivos * no * llamado Calculate.sh: 'shopt extglob nullglob; para el archivo en! (Calculate.sh) ' –

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