Dateiliste unterschiedlicher Dateien in Backupordnern

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
noodle
Beiträge: 6
Registriert: 03.01.2017 12:01:25

Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von noodle » 03.01.2017 13:25:59

Hallo,

wie kann ich eine Liste (vollständige Pfadnamen) der geänderten/neuen Dateien aus zwei Ordnern BackupTag1,BackupTag2 generieren?

Ich habe es mit diff -rq versucht, aber diff gibt so etwas aus:
Nur in BackupTag1/unterverzeichnis: datei1.pdf .
Dateien BackupTag1/datei1.txt und BackupTag2/datei1.txt sind verschieden .

Ich möchte aber nur die Pfadnamen der gänderten/neuen Dateien aus BackupTag2 in eine Liste (Textdatei) schreiben und dann weiterverarbeiten.
Hintergrund ist die Gesamtgröße der geänderten/neuen Dateien zum vorherigen Backup zu bestimmen.

Hat jemand eine Idee?

tobo
Beiträge: 2339
Registriert: 10.12.2008 10:51:41

Re: Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von tobo » 03.01.2017 15:11:08

Sowas hier?

Code: Alles auswählen

$ rsync -rn --out-format "%f" BackupTag2/ BackupTag1/
Möglicherweise auch mit rsync-Parameter -c, je nachdem wie die Dateien von BTag1 nach BTag2 gelangt sind!? Die beiden BTags vertauschen, die Ausgabe der Pfade ist so qualifiziert wie die Parametermitgabe.

noodle
Beiträge: 6
Registriert: 03.01.2017 12:01:25

Re: Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von noodle » 03.01.2017 15:34:02

perfekt! vielen Dank

nun muss ich noch die Gesamtgröße der Dateien berechnen.
mit folgendem Einzeiler kann ich die Einzelgrößen als Liste ausgeben.

Code: Alles auswählen

cat pfadliste.txt | while read line; do ls -l "$line" | awk '{print $5}' ; done

Wie kann ich elegant die Einzelgrößen addieren und "human readable" ausgeben?

noodle
Beiträge: 6
Registriert: 03.01.2017 12:01:25

Re: Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von noodle » 03.01.2017 16:44:43

So, nun habe ich eine Lösung die für mich ausreicht:

Code: Alles auswählen

$ rsync -rni --out-format "%f" BackupTag1 BackupTag2 | awk '{printf "%s%c",$0,0}' > list0.txt ; du -csh --files0-from=list0.txt

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von FragDenPinguin » 06.01.2017 11:19:37

Wenn du schon awk benutzt, warum dann nicht

Code: Alles auswählen

 awk '{totsize=totsize+$1} END {print totsize}' dateigroessen.txt
?

Der END-Teil wird dabei nur einmalig ausgeführt, nachdem die Datei/der Input fertig gelesen wurde.

Code: Alles auswählen

 numfmt --to=iec
macht das Resultat dann human-readable, also insgesamt

Code: Alles auswählen

 awk '{totsize=totsize+$1} END {print totsize}' dateigroessen.txt|numfmt --to=iec 
, wenn du awk per dateigroessen.txt mit Zeilen fütterst, bei denen die Dateigrößen an erster Stelle stehen. Du kannst natürlich auch einfach in der While-Schleife aufsummieren und dann wieder per numfmt ins Human-Readable-Format konvertieren.

Am sinnvollsten/einfachsten (Geschmackssache) finde ich aber, awk mit dem Output deiner while-Schleife zu füttern, anstatt es innerhalb der Schleife jede Zeile einzeln verarbeitet zu lassen:

Code: Alles auswählen

cat pfadliste.txt | while read line; do ls -l "$line"; done | awk '{totsize=totsize+$5} END{print totsize}'|numfmt --to=iec
Zuletzt geändert von FragDenPinguin am 06.01.2017 17:06:29, insgesamt 1-mal geändert.

noodle
Beiträge: 6
Registriert: 03.01.2017 12:01:25

Re: Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von noodle » 06.01.2017 14:23:15

greife deine Lösung gerne auf, jedoch kommt numfmt nicht mit dem Zahlenformat zurecht:

Code: Alles auswählen

numfmt: ungültige Endung in Eingabe: „„7.15919e+09““
Kann man das noch formatieren (mit awk)?

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von FragDenPinguin » 06.01.2017 17:03:24

Klappt es damit?

Code: Alles auswählen

cat pfadliste.txt | while read line; do ls -l "$line"; done | awk '{totsize=totsize+$5} END{printf("%li", totsize)}'|numfmt --to=iec
.

Stimmt das Ergebnis? Ansonsten muss man totsize im printf wahrscheinlich noch mit dem passenden Faktor multiplizieren.

noodle
Beiträge: 6
Registriert: 03.01.2017 12:01:25

Re: Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von noodle » 07.01.2017 10:40:57

FragDenPinguin hat geschrieben:Klappt es damit?

Code: Alles auswählen
cat pfadliste.txt | while read line; do ls -l "$line"; done | awk '{totsize=totsize+$5} END{printf("%li", totsize)}'|numfmt --to=iec
Nein, leider nicht, denn es kommt 2.0G heraus und ohne numfmt der Zahlenwert 2147483647 (Limit von long integer).
Ich habe aber eine Gesamtgröße von 6,7G in diesem Fall ermittelt.

[Update]
habe es ohne numfmt hinbekommen:

Code: Alles auswählen

rsync -rni --out-format "%f" BackupTag1/ BackupTag2/ | while read line ; do ls -l "$line"; done | awk '{ts=ts+$5} END{printf("%.2fG\n", ts/1024/1024/1024)}'
6,67G
Nachteil gegenüber der Lösung mit 'du' ist ,man muss sich auf eine feste Größe festlegen. Im GB-Bereich ist diese Lösung hier ok, aber ansonsten nicht so schön.
[/Update]

noodle
Beiträge: 6
Registriert: 03.01.2017 12:01:25

Re: Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von noodle » 07.01.2017 11:28:19

Damit klappt es nun.

Code: Alles auswählen

cat pfadliste.txt | while read line; do ls -l "$line"; done | awk '{totsize=totsize+$5} END{printf("%0.f", totsize)}'|numfmt --to=iec

FragDenPinguin
Beiträge: 34
Registriert: 06.01.2017 05:41:47

Re: Dateiliste unterschiedlicher Dateien in Backupordnern

Beitrag von FragDenPinguin » 07.01.2017 16:35:48

:THX:

Interessant ist vielleicht noch, warum das printf("%li", totsize) bei mir bis in den Petabyte-Bereich (mehr habe ich nicht getestet) funktioniert. Kommt es da auf die awk-Implementierung an?

Antworten