Forum: PC-Programmierung Fortschrittsanzeige mit find?


von Alex (Gast)


Lesenswert?

Moin,

ich habe auf einem Linux Rechner ein Script um ein lokales Verzeichnis 
mit rsync mit einem Server zu syncronisieren.

Ich habe mit dem parameter "-progress" eine Anzegie über die aktuelle 
Datei, die Geschwindigkeit, die Zeit die gebraucht wurde für die Datei 
und eine fortlaufende Nummer mit der Gesamtanzahl aller Dateien.

Die Ausgabe sieht so aus:
1
Pfad          
2
Bytes       1.00 MB/s     0:00:00 (xfr#98, to-chk=5/126)

Die Fortlaufende Nummer wird so ausgegeben:

to-chk=5/126

Ich möchte gerne mit einer Pipe, die Ausgabe von rsync umleiten und am 
Ende nur noch folgendes angezeigt bekommen:

1/126

Alle anderen Daten sollen von der Ausgabe "verschwinden".

Kann mir jemand behilflich sein wie ich das bekomme? Ich habe an find 
gedacht. Aber ich weiß nicht genau wie ich damit umgehen soll.

Ich bin über jede Hilfe dankbar!

Grüße

von Gerd E. (robberknight)


Lesenswert?

Alexander ʕ. schrieb:
> Ich habe an find
> gedacht. Aber ich weiß nicht genau wie ich damit umgehen soll.

find ist das komplett falsche Werkzeug dafür. Das sucht nach Dateien auf 
der Festplatte.

Schau Dir mal "sed" an, damit kannst Du mit Regular Expressions Streams 
verändern.

von Jack V. (jackv)


Lesenswert?

›find‹ ist eher zum Suchen von Dateien im Dateisystem gedacht. Eine der 
einfachsten Methoden, aus einer Ausgabe nur einen Teil auszuschneiden, 
stellt wohl ›cut‹ dar. Wenn’s etwas komplexer sein soll, könnte man auch 
›awk‹ o.Ä. nehmen, aber für den Job hier sollte cut ausreichen.

Wie man’s benutzt, steht in der mitgelieferten Anleitung, aufzurufen mit 
›man cut‹. Wenn man das „=“ als Delimiter nimmt, braucht man nur noch 
das „)“ mit etwa ›sed‹ wegzumachen, und es dürfte dem Gewünschten 
entsprechen.

: Bearbeitet durch User
von olibert (Gast)


Lesenswert?

Find hilft dir da nicht weiter:
Mit einer Regex in sed oder Perl ist das einfach zu machen.

von Gerd E. (robberknight)


Lesenswert?

Jack V. schrieb:
> Wie man’s benutzt, steht in der mitgelieferten Anleitung, aufzurufen mit
> ›man cut‹. Wenn man das „=“ als Delimiter nimmt,

Bei der Variante muss man aufpassen mit Dateinamen die ein "=" 
enthalten. Die würden das cut dann durcheinanderbringen.

Ich denke daher sed mit einer Regex ist die bessere Lösung, da kann man 
spezifischer filtern.

von Jack V. (jackv)


Lesenswert?

In der betreffenden Zeile ist doch gar kein Dateiname enthalten, und das 
Ausgabeformat ist vorhersehbar/statisch?

Aber ja, natürlich gibt’s nahezu unendlich viele Möglichkeiten, die 
gewünschten Infos „freizustellen“. Die Möglichkeit mit dem ›cut‹ fand 
ich hier am einfachsten, gerade auch für ’nen Einsteiger. Bevor er das 
mit ›sed‹ hinbekommt, müsste er erstmal viel lesen. Zumindest ich sehe 
erstmal mit meinen sed-Kenntnissen keine einfache Möglichkeit, den Job 
zu erledigen (wobei sich diese Kenntnisse bei mir zugegebenermaßen auch 
im Rahmen von „finden und ersetzen“ halten).

von Gerd E. (robberknight)


Lesenswert?

Jack V. schrieb:
> In der betreffenden Zeile ist doch gar kein Dateiname enthalten, und das
> Ausgabeformat ist vorhersehbar/statisch?

guter Einwand. Man könnte zuerst mit einem grep die Zeilen mit dem 
"to-chk="  rausfiltern und danach dann das cut verwenden.

von foobar (Gast)


Lesenswert?

Hast du dir mal die --out-format Option angeschaut?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.