2012-04-21 10 views
5

Ich habe eine Reihe von Dateien in einem Verzeichnis alle Namen YYYY_MM_DDRun Shell-Skript für jede Datei im Verzeichnis

-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 

ich ein Shell-Skript, das eine Datei als Parameter um akzeptiert und berechnet auf der Basis der Daten Zahlen die Datei, ich rufe das Skript so

Ich möchte dieses Shell-Skript für jede Datei in diesem Verzeichnis ausführen.

Wie würde ich darüber gehen, Xargs ??

+0

Der 'find' Befehl wird wahrscheinlich ein guter Anfang sein. Hier sind ein paar Ressourcen: http://www.grymoire.com/Unix/Find.html und http://mywiki.wooledge.org/UsingFind (wird viel komplizierter, aber einen Blick wert). – Telemachus

Antwort

5

Haben Sie den Befehl find mit Ausführung versucht?

Meine Probe werden die Dateien Echo, aber Sie können als Parameter

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

Das ist cool, aber wie würde ich sie Dateien zu meinem Calculate.sh-Skript in Reihenfolge übergeben? –

+2

Ok. In diesem Fall müssen Sie alle Dateien sortieren, bevor Sie das Skript aufrufen. Probieren Sie so etwas aus. -maxdepth 1 -Typ f | sortieren | xargs -I '{}' Calculate.sh '{}' ' – MrJames

+0

Ich verstehe den Befehl bis zu xargs, ich verstehe, dass sort die Daten in xargs leitet, was ist der -I Schalter und warum gibt es zwei von '{}'? ? Danke vielmals. –

1

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

3

Eine einfache for-Schleife in der Schale ein Shell-Skript mit dem Dateinamen nennen:

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

Würde dies nicht auch auf sich selbst laufen, wenn Calculate.sh im selben Verzeichnis wäre? – ale10ander

+1

ja würde es. Um dies zu vermeiden, mit bash, um alle Dateien * not * mit dem Namen Calculate.sh zu durchlaufen: 'shopt extglob nullglob; für Datei in! (Calculate.sh) ' –

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