Datei Attribute ändern

Woolfgang359

Benutzer
Mitglied seit
17. Nov 2010
Beiträge
108
Punkte für Reaktionen
15
Punkte
18
Hallo,
ich habe blöderweise bei der Übernmahme der Daten vom alten zum neuen NAS etwa 6,5TB Daten mit der File Station kopiert.

Jetzt wie ich mit robocopy über das Netzwerk meine anderen Sicherungsplatten (von ext4 nach NTFS) synchronisieren wollte da wird alles angegriffen und neu synchronisiert obwohl sich nichts geändert hat. Ich vermute, dass mit dem Kopieren alle Dateien ein neues Datum haben. Und für robocopy ist das nun alles neu zu synchronisieren auch wenn Name und Dateigröße gleich sind.
Blöd. Ich hätte das Übernehmen der Daten mit rsync machen sollen, da die Übernahme von ext4 nach ext4 gemacht wurde und die Attribute hätte ich dann behalten. Pech.

Frage:
Kann ich (sinnvollerweise in einem Script) die Attribute, vom alten Datenbestand zum neuen Datenbestand übertragen.
Also, wenn die Ordnerstruktur, der Name und die Größe übereinstimmen, dann würde ich die Attribute insbesondere alle Datumswerte im Ziel überschreiben. Owner, Group und Berechtigung sind bei reinen Daten nicht das Problem, ich würde sie aber kontrollieren und ggf. anpassen. Aber wie bitte ändert man ein Erstellungsdatum.
Ich habe nämlich mehrere Sicherungsplatten, damit auch welche außer Haus kommen. Und wenn ich jetzt mehrfach 6,5TB sichern muss, obwohl die Daten eh schon am Ziel sind, das sind Tage für nix. Ich würde das Ganze in einem Script machen, aber wie lese ich die Attribute aus und wie schreibe ich sie in einen anderen File?

Es wäre schön wenn jemand meine Frage beantworten könnte ohne das Thema auf die Art der Sicherung zu lenken.

Danke für die Info.
lg Wolfgang
 
Zuletzt bearbeitet:

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.825
Punkte für Reaktionen
1.782
Punkte
314
Der touch Befehl kann in Verbindung mit der Option -t den Zeitstempel ändern. Wie du dabei aber Quelle und Ziel vergleichst, um bei Abweichung den Zeitstempel zu korrigieren, kann ich dir grade nicht beantworten.
 

DaveR

Benutzer
Sehr erfahren
Mitglied seit
30. Mrz 2022
Beiträge
387
Punkte für Reaktionen
741
Punkte
144
Rather writing a script (and I love writing scripts) I would do it the easy way with Beyond Compare. You can use the trial version, but it's well worth buying the standard edition. I use it almost every day.
  1. Open Beyond Compare.
  2. Select the 2 folders to compare.
  3. Click On "Session > Session Settings > Comparison" and make sure "Compare file size" and Compare timestamps" are ticked.
  4. Select all the folders on the side with incorrect time stamps.
  5. Right-click and select Touch.
  6. Tick "Including folder contents".
  7. Select "Copy timestamps from other side"
  8. Click Start.

Session Settings

1736227015439.png

1736227032922.png


Touch

1736227089061.png
 
Zuletzt bearbeitet:

Woolfgang359

Benutzer
Mitglied seit
17. Nov 2010
Beiträge
108
Punkte für Reaktionen
15
Punkte
18
@DaveR
Okay, thank you, that will be the second solution. First I try to write a script, because I have 100% control of what is done. But at the same time, I am also looking at your proposed app. :D

----

@Tommes
Danke für den ersten Schritt.
Ich habe gesehen, dass man mit "stat" die Attribute auslesen kann.
stat -c="%n %U %G %x %y %z" ./testfile.txt

Jetz muss ich nur eine Schleife machen in /volume1 (destfile) wo die Dateien mit dem falschen Zeitstempel liegen. Und dann schaue ich zum Originalfile der auf /volumeUSB1/usbshare (sourcefile) liegt und zwar in der exakt gleichen Ordnerstruktur. (andere HDD, aber gleiche Ordnerstruktur, gleicher Filename, gleiche Größe)

Und dann den sourcefile mit "stat" auslesen, einen String für "touch" aufbereiten und dann den destfile ändern.
Ich muss das natürlich so aufbauen, dass ich damit nicht einen riesen Mist veranstalte. Daher werde ich zuerst simulieren und ein Protokoll schreiben, bevor ich scharf schiesse.
Ich denke das sollte machbar sein.

Den Vorschlag von @DaveR schaue ich mir parallel dazu an.
Falls jemand eine bessere Idee hat oder mich warnen möchte, welche Fallstricke lauern könnten, bitte um Info.
 
  • Like
Reaktionen: Tommes

Tommes

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
26. Okt 2009
Beiträge
9.825
Punkte für Reaktionen
1.782
Punkte
314
Natürlich darfst du dein funktionsfähiges Script gerne hier veröffentlichen, wenn du magst!

Mit stat habe ich zuletzt Ordner- und Dateirechte ausgelesen und bei Bedarf angepasst. Das sollte dann wohl auch mit dem Timestamp funktionieren. Gut zu wissen.
 

Hagen2000

Benutzer
Mitglied seit
25. Mai 2016
Beiträge
389
Punkte für Reaktionen
142
Punkte
43
Vielleicht hilft Dir auch die Option touch -r - da gibst Du ein Referenz-File an, von dem der Zeitstempel übernommen wird.
Ist vielleicht auch besser als der stat-Befehl, da sonst eventuell Sekundenbruchteile fehlen und es doch nicht funktioniert.
 
  • Like
Reaktionen: DaveR

Hagen2000

Benutzer
Mitglied seit
25. Mai 2016
Beiträge
389
Punkte für Reaktionen
142
Punkte
43
So könntest Du es probieren:

cd ZIEL find . -type f -exec touch {} -r QUELLE/{} \;

Voraussetzung: Zugang per SSH ist hergestellt und die Verzeichnisse ZIEL und QUELLE (durch richtige Pfade ersetzen!) sind beide von der Shell aus erreichbar und sie haben den identischen Inhalt.
Der Befehl find sucht im ZIEL-Verzeichnis rekursiv alle Dateien und führt einen touch mit Referenzierung der entsprechenden Datei im QUELL-Verzeichnis aus.
Ohne Gewähr 😉
 
  • Like
Reaktionen: DaveR


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat