Dateiliste unterschiedlicher Dateien in Backupordnern
Dateiliste unterschiedlicher Dateien in Backupordnern
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?
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?
Re: Dateiliste unterschiedlicher Dateien in Backupordnern
Sowas hier?
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.
Code: Alles auswählen
$ rsync -rn --out-format "%f" BackupTag2/ BackupTag1/
Re: Dateiliste unterschiedlicher Dateien in Backupordnern
perfekt! vielen Dank
nun muss ich noch die Gesamtgröße der Dateien berechnen.
mit folgendem Einzeiler kann ich die Einzelgrößen als Liste ausgeben.
Wie kann ich elegant die Einzelgrößen addieren und "human readable" ausgeben?
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?
Re: Dateiliste unterschiedlicher Dateien in Backupordnern
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
-
- Beiträge: 34
- Registriert: 06.01.2017 05:41:47
Re: Dateiliste unterschiedlicher Dateien in Backupordnern
Wenn du schon awk benutzt, warum dann nicht
?
Der END-Teil wird dabei nur einmalig ausgeführt, nachdem die Datei/der Input fertig gelesen wurde.
macht das Resultat dann human-readable, also insgesamt
, 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
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
Code: Alles auswählen
awk '{totsize=totsize+$1} END {print totsize}' dateigroessen.txt|numfmt --to=iec
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.
Re: Dateiliste unterschiedlicher Dateien in Backupordnern
greife deine Lösung gerne auf, jedoch kommt numfmt nicht mit dem Zahlenformat zurecht:
Kann man das noch formatieren (mit awk)?
Code: Alles auswählen
numfmt: ungültige Endung in Eingabe: „„7.15919e+09““
-
- Beiträge: 34
- Registriert: 06.01.2017 05:41:47
Re: Dateiliste unterschiedlicher Dateien in Backupordnern
Klappt es damit? .
Stimmt das Ergebnis? Ansonsten muss man totsize im printf wahrscheinlich noch mit dem passenden Faktor multiplizieren.
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.
Re: Dateiliste unterschiedlicher Dateien in Backupordnern
Nein, leider nicht, denn es kommt 2.0G heraus und ohne numfmt der Zahlenwert 2147483647 (Limit von long integer).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
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
[/Update]
Re: Dateiliste unterschiedlicher Dateien in Backupordnern
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
-
- Beiträge: 34
- Registriert: 06.01.2017 05:41:47
Re: Dateiliste unterschiedlicher Dateien in Backupordnern
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?