find-Ergebnis in 2 Teile splitten
Es geht darum ein Suchergebnis von find zu teilen und dann die eine Hälfte der 1. CPU zuzuordnen und die andere Hälfte der 2. CPU. Wie geteilt wird ist nicht so tragisch, lieber wäre es mir aber abwechselnd. Nehmen wir an, find hat 5 Dateien gefunden, dann hätte ich also gern folgendes: Dateien: a b c d e Suchergebnis 1 a c d Suchergebnis 2 b d Alternativ wäre auch denkbar: Suchergebnis 1 a b c Suchergebnis 2 d e -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 13. Januar 2012 16:36 schrieb Аl Воgnеr
Es geht darum ein Suchergebnis von find zu teilen und dann die eine Hälfte der 1. CPU zuzuordnen und die andere Hälfte der 2. CPU. Wie geteilt wird ist nicht so tragisch, lieber wäre es mir aber abwechselnd.
xargs ? Gruß Martin -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Fr, 13 Jan 2012 16:47:16 CET schrieb Martin Schröder:
Am 13. Januar 2012 16:36 schrieb Аl Воgnеr
: Es geht darum ein Suchergebnis von find zu teilen und dann die eine Hälfte der 1. CPU zuzuordnen und die andere Hälfte der 2. CPU. Wie geteilt wird ist nicht so tragisch, lieber wäre es mir aber abwechselnd.
xargs ?
Ich verstehe nicht wie das mit xargs _abwechselnd_ gehen soll und es reicht auch nicht nur einen Befehl zu übergeben. find "$SOURCEDIR" -type f -name '*.avi' | sort | \ while read -r SRCCLIP; do echo $SRCCLIP done Statt "echo" stehen dann dort einige Befehle u.a. HandBrakeCLI -i "$SRCCLIP" ... Ich stelle mir simpel vor, das Script 2x aufzurufen und einmal wird die eine Hälfte und mit dem anderen Script die andere Hälfte aufgerufen. Es soll bewusst nur 1 Kern verwendet werden. -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Fri, 13 Jan 2012, ?l ??gn?r schrieb: [..]
Ich stelle mir simpel vor, das Script 2x aufzurufen und einmal wird die eine Hälfte und mit dem anderen Script die andere Hälfte aufgerufen. Es soll bewusst nur 1 Kern verwendet werden.
==== #!/bin/sh exec 3>&1 seq 20 | { tee /dev/stderr | \ sed -n '1~2p' | xargs echo "job1: " >&3 ; } 2>&1 | sed -n '2~2p' | xargs echo "job2: "; ==== job1: 1 3 5 7 9 11 13 15 17 19 job2: 2 4 6 8 10 12 14 16 18 20 Statt 'echo "job<N>: "' halt dein Script. HTH, -dnh -- Feudalism: It's your Count that Votes. Democracy: It's your Vote that Counts. Communism: Your Votes don't Count. Floridism: We Can't Count your Votes (Thanks to Ken Brody for this one!) -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo David, das ist doch zum Heulen! Ich dachte, ich könnte programmieren und ich käme halbwegs mit einem Linux-Rechner zurecht. Und dann schreibst Du On 01/13/2012 05:58 PM, David Haller wrote:
==== #!/bin/sh exec 3>&1 seq 20 | { tee /dev/stderr | \ sed -n '1~2p' | xargs echo "job1: " >&3 ; } 2>&1 | sed -n '2~2p' | xargs echo "job2: "; ====
job1: 1 3 5 7 9 11 13 15 17 19 job2: 2 4 6 8 10 12 14 16 18 20
Statt 'echo "job<N>: "' halt dein Script.
und ich habe (i) Schwierigkeiten das überhaupt zu lesen und (ii) sehe ich beim Entziffern, dass lauter Dinge drin sind, die ich noch nie wirklich verstanden habe. Mit anderen Worten: Ich ziehe meinen Hut und verneige mich tief! (Sorry, das musste jetzt raus.) Gruß Jan -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo Jan Handwerker, Am Freitag, 13. Januar 2012 18:14 schrieb Jan Handwerker:
Hallo David,
das ist doch zum Heulen! Ich dachte, ich könnte programmieren und ich käme halbwegs mit einem Linux-Rechner zurecht. Und dann schreibst Du
On 01/13/2012 05:58 PM, David Haller wrote:
==== #!/bin/sh exec 3>&1 seq 20 | { tee /dev/stderr | \ sed -n '1~2p' | xargs echo "job1: " >&3 ; } 2>&1 | sed -n '2~2p' | xargs echo "job2: "; ====
job1: 1 3 5 7 9 11 13 15 17 19 job2: 2 4 6 8 10 12 14 16 18 20
Statt 'echo "job<N>: "' halt dein Script.
und ich habe (i) Schwierigkeiten das überhaupt zu lesen und (ii) sehe ich beim Entziffern, dass lauter Dinge drin sind, die ich noch nie wirklich verstanden habe.
Wenns Dich tröstet, ich kann auch programmieren und komme mit Linuxrechnern (seit 5.3) zurecht, trotzdem habe ich die gleichen Schwierigkeiten. Wenns aber wirklich nötig wäre, könnten wir uns die ganzen manpages reintun...
Mit anderen Worten: Ich ziehe meinen Hut und verneige mich tief!
Da schließe ich mich vollinhaltlich an!! -- Herzliche Grüße! Rolf Muth Meine Adressen duerfen nicht fuer Werbung verwendet werden! PGP Public Key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0xF8DC41935544C89A fingerprint: C025 3071 8E56 F8F1 250A 5624 F8DC 4193 5544 C89A
Am Fr, 13 Jan 2012 18:14:17 CET schrieb Jan Handwerker:
Mit anderen Worten: Ich ziehe meinen Hut und verneige mich tief!
Ich schließe mich an! Der David hat ein gigantisches Wissen und so wie ich ihn kenne, ist er dabei noch selber bescheiden, extrem freundlich, hilfsbereit und auch geduldig! -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Fr, 13 Jan 2012 17:58:58 CET schrieb David Haller: Hallo David, kannst du das ein wenig erklären, ich habe es auch nicht ganz verstanden bzw. bin mir nicht sicher, was ich da noch ändern muss. Es geht um tausende avi-Schnipsel von ein paar Sekunden aus einem Camcorder.
Ich stelle mir simpel vor, das Script 2x aufzurufen und einmal wird die eine Hälfte und mit dem anderen Script die andere Hälfte aufgerufen. Es soll bewusst nur 1 Kern verwendet werden.
==== #!/bin/sh exec 3>&1
Warum die Umleitung?
seq 20 | {
Muss die Anzahl genau bestimmt sein oder könnte man einfach 10000 nehmen? Die Anzahl ist aber sowieso schon in einer Variable.
tee /dev/stderr | \
warum nach stderr?
sed -n '1~2p' | xargs echo "job1: " >&3 ; } 2>&1 | sed -n '2~2p' | xargs echo "job2: "; ====
job1: 1 3 5 7 9 11 13 15 17 19 job2: 2 4 6 8 10 12 14 16 18 20
So wie ich das verstehe, holst du einfach die geraden und ungeraden Zahlen aus "seq" raus. Ich verstehe aber nicht, wie ich den Dateinamen aus find zuordne.
Statt 'echo "job<N>: "' halt dein Script.
Das Script wird aufgerufen. Script Dateiname_mit_vollem_Pfad. -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am 13.01.2012 19:28, schrieb Аl Воgnеr:
Am Fr, 13 Jan 2012 17:58:58 CET schrieb David Haller:
Hallo David, Hallo Al,
ich versuch mal mein Glück, soweit ich verstehe.
==== #!/bin/sh exec 3>&1
Warum die Umleitung?
seq 20 | {
Muss die Anzahl genau bestimmt sein oder könnte man einfach 10000 nehmen? Die Anzahl ist aber sowieso schon in einer Variable. Das ist im Endeffekt dein find. Wird hier nur benötigt, um einen Output zu generieren.
tee /dev/stderr | \
warum nach stderr?
Damit der Output (von find) nur verdoppelt und nach stderr geschoben,…
sed -n '1~2p' | xargs echo "job1: " >&3 ; } 2>&1 | sed -n '2~2p' | xargs echo "job2: "; ^^^^ um sie hier noch einmal zur verfügung zu haben für die 2. Auswertung.
====
job1: 1 3 5 7 9 11 13 15 17 19 job2: 2 4 6 8 10 12 14 16 18 20
So wie ich das verstehe, holst du einfach die geraden und ungeraden Zahlen aus "seq" raus. Nein. Er holt die geraden und ungeraden Argumente von seq (find) raus.
Ich verstehe aber nicht, wie ich den Dateinamen aus find zuordne.
Statt 'echo "job<N>: "' halt dein Script.
Das Script wird aufgerufen.
Script Dateiname_mit_vollem_Pfad.
mit freundlichen Grüßen / with best regards Harald Stürmer - -- A society that gets rid of all its troublemakers goes downhill. - -Robert A. Heinlein, science-fiction author (1907-1988) -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.16 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk8QhDEACgkQ+DB5D1hMUTa9TwCeICPJoxcjCNmCh8vxcBu14RC8 kJoAoIV+cC1TAvEOWwgSbZcrPsDFh0RV =fpOG -----END PGP SIGNATURE----- -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, ok, dann mal für die versammelte Mannschaft ;) Am Fri, 13 Jan 2012, ?l ??gn?r schrieb:
Am Fr, 13 Jan 2012 17:58:58 CET schrieb David Haller: kannst du das ein wenig erklären, ich habe es auch nicht ganz verstanden bzw. bin mir nicht sicher, was ich da noch ändern muss. Es geht um tausende avi-Schnipsel von ein paar Sekunden aus einem Camcorder.
Klar.
Ich stelle mir simpel vor, das Script 2x aufzurufen und einmal wird die eine Hälfte und mit dem anderen Script die andere Hälfte aufgerufen. Es soll bewusst nur 1 Kern verwendet werden.
==== #!/bin/sh exec 3>&1
Warum die Umleitung?
Damit das erste sed am zweiten vorbei auf stdout schreiben kann.
seq 20 | {
Muss die Anzahl genau bestimmt sein oder könnte man einfach 10000 nehmen? Die Anzahl ist aber sowieso schon in einer Variable.
Da kommt dein 'find' hin.
tee /dev/stderr | \
warum nach stderr?
Damit die Ausgabe von find bei beiden sed landet.
sed -n '1~2p' | xargs echo "job1: " >&3 ; } 2>&1 | sed -n '2~2p' | xargs echo "job2: "; ====
job1: 1 3 5 7 9 11 13 15 17 19 job2: 2 4 6 8 10 12 14 16 18 20
So wie ich das verstehe, holst du einfach die geraden und ungeraden Zahlen aus "seq" raus.
Nein. Ich hole jew. die gerade bzw. ungerade Zeile raus. Jetzt nochmal im kommentierten Kontext: exec 3>&1 ### dupliziere stdout (das _aktuelle_) auf fd 3 exec 4>&2 ### dupliziere stderr (das _aktuelle_) auf fd 4 find . -type -f -name '*.avi' | ### oder wie die Dateien eben heißen { ### shell-block auf tee /dev/stderr | ### dupliziere die find-Ausgabe nach stderr sed -n '1~2p' | ### filtere aus find-Ausgabe auf stdout die ### ungeraden Zeilen aus xargs -n 1 dein_script 2>&4 >&3 ; ### und diese einzeln an dein ### Script verfüttern ### ACHTUNG: FEHLER von mir: 2 muß hier zum ### duplizierten stderr, sonst landet das ### beim 2ten sed, siehe [1] mit nem ### modifizierten test-script ### durch die Umleitung 2>&4 landen ### evtl. Fehlermeldungen vom sed/xargs auf ### dem originalen stderr (der Konsole). } 2>&1 \ ### hier das die von tee auf stderr ### duplizierte find-Ausgabe auf stdout umleiten | sed -n '2~2p' | ### die dann an sed verfüttern das die ### geraden Zeilen ausfiltert xargs -n 1 dein_script ### und diese ebenfalls an einzeln an ### dein Script verfüttern Nochmal ein Beispiel: $ touch $(seq 20) $ echo 'echo "$0" > $1' > job1.sh $ echo 'echo "$0" > $1' > job2.sh Die 2 unterschiedlichen job?.sh Scripte nur, damit nachvollziehbar wird, welche Datei von welchem "Job" bearbeitet wurde. ==== temp_test.sh ==== exec 3>&1 exec 4>&2 find . -type f -name '[0-9]*' | { tee /dev/stderr | \ sed -n '1~2p' | xargs -n 1 sh job1.sh 2>&4 >&3 ; } 2>&1 | sed -n '2~2p' | xargs -n 1 sh job2.sh ==== $ ls [0-9]* | sort -n| while read f; do echo "$f: $(<$f)"; done 1: job1.sh 2: job2.sh 3: job1.sh 4: job2.sh 5: job1.sh 6: job2.sh 7: job1.sh 8: job2.sh 9: job1.sh 10: job2.sh 11: job1.sh 12: job2.sh 13: job1.sh 14: job2.sh 15: job1.sh 16: job2.sh 17: job1.sh 18: job2.sh 19: job1.sh 20: job2.sh Wie gesagt, das 'job1.sh'/'job2.sh' dient nur dazu, daß man sieht von welchem Aufruf via xargs -n 1 die jew. Datei bearbeitet wurde. Die Ausgabe von 'find' wird also zu 50:50 auf die beiden "Job.sh" Aufrufe verteilt (plus ggfs. Überhang bei unterschiedlichen Laufzeiten und ungerader Anzahl Dateien ;) HTH, -dnh, hoffend alle Unklarheiten beseitigt zu habend [1] ==== exec 3>&1 exec 4>&2 seq 20 | { tee /dev/stderr | \ sed -n '1~2p' | xargs ls "job1: " >&3 ; } 2>&1 | sed -n '2~2p' | xargs echo "job2: "; ==== $ sh ~/test.sh job2: 2 4 6 8 10 12 14 16 18 20 ls: cannot access 1: No such file or directory ls: cannot access 5: No such file or directory ls: cannot access 9: No such file or directory ls: cannot access 13: No such file or directory ls: cannot access 17: No such file or directory -- "The command 'man man' works fine, but 'man woman' produces: No manual entry for woman." -- Constantinos Maltezos -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (6)
-
David Haller
-
Harald Stürmer
-
Jan Handwerker
-
Martin Schröder
-
Rolf Muth
-
Аl Воgnеr