Scriptproblem: find ssh Dateienvergleich, etc
Eine HD hatte irgendwelche Probleme bekommen, worauf ich die Dateien von einer anderen HD kopiert habe, soweit ganz normal. Doch fehlten danach, warum auch immer, Dateien, die auf einer weiteren Sicherung vorhanden waren. Nun möchte ich auf einfache Weise per Bash-Script Dateien zählen und wenn die Anzahl nicht ident ist, eine Meldung ausgeben. Alles kein Problem, solange ich nicht einen Befehl via ssh abschicke, dann wird die Schleife nicht abgearbeitet. find "$PFADORIGINAL" -mindepth 1 -maxdepth 1 -type d | sort | \ while read -r DIR; do KATEGORIE_ORIGINAL=`basename "$DIR"` KOPIE="$PFADKOPIE""$KATEGORIE_ORIGINAL" CNT_ORIGINAL=`ssh -p $PORT $USER@$IP find "$ORIGINAL" -type f | \ wc -l` CNT_KOPIE=`find "$KOPIE" -type f | wc -l` done Was fehlt da, ein export? Damit kam ich aber auch nicht klar. Das ist nicht alles was ich machen möchte, aber mit dem Rest komme ich schon klar. -- Α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 03.05.2014 18:20, schrieb Аl Воgnеr:
Eine HD hatte irgendwelche Probleme bekommen, worauf ich die Dateien von einer anderen HD kopiert habe, soweit ganz normal. Doch fehlten danach, warum auch immer, Dateien, die auf einer weiteren Sicherung vorhanden waren.
Nun möchte ich auf einfache Weise per Bash-Script Dateien zählen und wenn die Anzahl nicht ident ist, eine Meldung ausgeben. Alles kein Problem, solange ich nicht einen Befehl via ssh abschicke, dann wird die Schleife nicht abgearbeitet.
find "$PFADORIGINAL" -mindepth 1 -maxdepth 1 -type d | sort | \ while read -r DIR; do
KATEGORIE_ORIGINAL=`basename "$DIR"` KOPIE="$PFADKOPIE""$KATEGORIE_ORIGINAL"
CNT_ORIGINAL=`ssh -p $PORT $USER@$IP find "$ORIGINAL" -type f | \ wc -l` CNT_KOPIE=`find "$KOPIE" -type f | wc -l`
done
Was fehlt da, ein export? Damit kam ich aber auch nicht klar. Das ist nicht alles was ich machen möchte, aber mit dem Rest komme ich schon klar.
müsste das nicht `ssh -p ... "find \"$ORIGINAL\" -type f | wc -l "` heißen? cu jth -- www.teddylinx.de -- 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 Mo, 05 Mai 2014 09:09:54 CEST schrieb Joerg Thuemmler:
Am 03.05.2014 18:20, schrieb Аl Воgnеr:
Eine HD hatte irgendwelche Probleme bekommen, worauf ich die Dateien von einer anderen HD kopiert habe, soweit ganz normal. Doch fehlten danach, warum auch immer, Dateien, die auf einer weiteren Sicherung vorhanden waren.
Nun möchte ich auf einfache Weise per Bash-Script Dateien zählen und wenn die Anzahl nicht ident ist, eine Meldung ausgeben. Alles kein Problem, solange ich nicht einen Befehl via ssh abschicke, dann wird die Schleife nicht abgearbeitet.
find "$PFADORIGINAL" -mindepth 1 -maxdepth 1 -type d | sort | \ while read -r DIR; do
KATEGORIE_ORIGINAL=`basename "$DIR"` KOPIE="$PFADKOPIE""$KATEGORIE_ORIGINAL"
CNT_ORIGINAL=`ssh -p $PORT $USER@$IP find "$ORIGINAL" -type f | \ wc -l` CNT_KOPIE=`find "$KOPIE" -type f | wc -l`
done
Was fehlt da, ein export? Damit kam ich aber auch nicht klar. Das ist nicht alles was ich machen möchte, aber mit dem Rest komme ich schon klar.
müsste das nicht `ssh -p ... "find \"$ORIGINAL\" -type f | wc -l "` heißen?
Gute Frage, ob da beim Quoting was nicht stimmt (ich probiere noch), aber: Ich merke gerade ich habe beim Eingangsposting was vergessen, nach dem ich vorher verschiedene Varianten probiert hatte, es sollte so sein: ssh -p $PORT $USER@$IP find "$PFADORIGINAL" -mindepth 1 -maxdepth 1 \ -type d | sort while read -r DIR; do Der find-Befehl wird also auf PC A ausgeführt und soll die Schleife auf PC B abfragen. Das funktioniert aber in der Schleife am anderen PC echo $DIR dh die Schleife wird abgearbeitet, wie es sein soll, erst wenn ein 2. ssh in der Schleife vorkommt, wird die Schleife abgebrochen. Andererseits funktioniert ein regex mit "oder" mit ssh nicht in der Konsole selbst. ssh ... -type f -regex ".*\.jpg$" | wc -l` funktioniert aber ein ssh ... -type f -regex ".*\(jpg\|gif\).*" | wc -l` funktioniert nicht. -- Α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 05.05.2014 21:28, schrieb Аl Воgnеr:
Am Mo, 05 Mai 2014 09:09:54 CEST schrieb Joerg Thuemmler:
Am 03.05.2014 18:20, schrieb Аl Воgnеr:
Eine HD hatte irgendwelche Probleme bekommen, worauf ich die Dateien von einer anderen HD kopiert habe, soweit ganz normal. Doch fehlten danach, warum auch immer, Dateien, die auf einer weiteren Sicherung vorhanden waren.
Nun möchte ich auf einfache Weise per Bash-Script Dateien zählen und wenn die Anzahl nicht ident ist, eine Meldung ausgeben. Alles kein Problem, solange ich nicht einen Befehl via ssh abschicke, dann wird die Schleife nicht abgearbeitet.
find "$PFADORIGINAL" -mindepth 1 -maxdepth 1 -type d | sort | \ while read -r DIR; do
KATEGORIE_ORIGINAL=`basename "$DIR"` KOPIE="$PFADKOPIE""$KATEGORIE_ORIGINAL"
CNT_ORIGINAL=`ssh -p $PORT $USER@$IP find "$ORIGINAL" -type f | \ wc -l` CNT_KOPIE=`find "$KOPIE" -type f | wc -l`
done
Was fehlt da, ein export? Damit kam ich aber auch nicht klar. Das ist nicht alles was ich machen möchte, aber mit dem Rest komme ich schon klar.
müsste das nicht `ssh -p ... "find \"$ORIGINAL\" -type f | wc -l "` heißen?
Gute Frage, ob da beim Quoting was nicht stimmt (ich probiere noch), aber:
Ich merke gerade ich habe beim Eingangsposting was vergessen, nach dem ich vorher verschiedene Varianten probiert hatte,
es sollte so sein:
ssh -p $PORT $USER@$IP find "$PFADORIGINAL" -mindepth 1 -maxdepth 1 \ -type d | sort while read -r DIR; do
Der find-Befehl wird also auf PC A ausgeführt und soll die Schleife auf PC B abfragen.
Das funktioniert aber in der Schleife am anderen PC echo $DIR
dh die Schleife wird abgearbeitet, wie es sein soll, erst wenn ein 2. ssh in der Schleife vorkommt, wird die Schleife abgebrochen.
Andererseits funktioniert ein regex mit "oder" mit ssh nicht in der Konsole selbst.
ssh ... -type f -regex ".*\.jpg$" | wc -l`
funktioniert
aber ein
ssh ... -type f -regex ".*\(jpg\|gif\).*" | wc -l`
funktioniert nicht.
Hi, also IMHO musst Du da oben ganz bestimmt quoten, sonst weiß doch kein Schwein, wo die Argumente von ssh aufhören und ob die Pipe da dazu gehört, oder nicht und wenn ja, die 2. auch...? ich würde sowas lieber mittels temporären Dateien aufteilen, dauert vielleicht etwas länger, ist aber definitv besser zu debuggen... Im letzten Beispiel... schreib doch den regex einfach 2x mit -o und Klammern drum hin, dann sparst Du Dir das Grübeln... cu jth -- www.teddylinx.de -- 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 2014-05-03 18:20, schrieb Аl Воgnеr:
Eine HD hatte irgendwelche Probleme bekommen, worauf ich die Dateien von einer anderen HD kopiert habe, soweit ganz normal. Doch fehlten danach, warum auch immer, Dateien, die auf einer weiteren Sicherung vorhanden waren.
Nun möchte ich auf einfache Weise per Bash-Script Dateien zählen und wenn die Anzahl nicht ident ist, eine Meldung ausgeben. Alles kein Problem, solange ich nicht einen Befehl via ssh abschicke, dann wird die Schleife nicht abgearbeitet.
find "$PFADORIGINAL" -mindepth 1 -maxdepth 1 -type d | sort | \ while read -r DIR; do
KATEGORIE_ORIGINAL=`basename "$DIR"` KOPIE="$PFADKOPIE""$KATEGORIE_ORIGINAL"
CNT_ORIGINAL=`ssh -p $PORT $USER@$IP find "$ORIGINAL" -type f | \ wc -l` CNT_KOPIE=`find "$KOPIE" -type f | wc -l`
done
Dein ssh konsumiert das komplette stdin. Lass die Schleife von einem anderen input lesen oder gib ssh kein stdin mit. Siehe auch hier: http://mywiki.wooledge.org/BashFAQ/089 Grüße, Christian -- 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 (3)
-
Christian Brabandt
-
Joerg Thuemmler
-
Аl Воgnеr