Ich verwende CentOS 5.5 und möchte eine große Anzahl von Ordnern innerhalb eines Volumes verschieben , wobei deren Größe erhalten bleibt mtime.
Die beste Lösung, die ich finden konnte, ist wie folgt:
cp -p -r source/data target/
rm -rf source/data
Mit mehr als 1 TB Daten auf einer NFS-Freigabe dauert das Kopieren ewig. Ich möchte nicht kopieren. Ich möchte sofort umziehen.
Wenn ich einen Ordner mit verschiebe mv source/data target/, wird die mtimeUhrzeit des Ordners (nicht der Dateien) auf die aktuelle Uhrzeit eingestellt. Dies liegt daran, dass der Inhalt des Ordners, den ich verschiebe, durch diesen Vorgang geändert wird (der ..Eintrag verweist auf einen anderen Inode).
Ich habe mir ein Shell-Skript ausgedacht, das ich aufgerufen habe mv_preserve_mtime.sh:
#!/bin/bash
# Moves source folder to target folder.
# You are responsible for making sure the target does not exist, otherwise this blows up
export timestamp=`stat -c %y $1`
mv "$1" "$2"
touch --date="${timestamp}" $2
Nun, das hat auch nicht funktioniert. Der Ordner mtimewird wiederhergestellt, aber alle Ordner in dem Ordner, den ich verschiebe (nur die Ordner mit einer Tiefe von 1 Ebene) werden mtimeaus Gründen, die ich nicht verstehe, zurückgesetzt.
Hat jemand eine richtige, effiziente und korrekte Lösung?
mvSchritt, der Ärger verursacht. Der NFS-Server ist eigentlich ein NetApp-Speicher, ich weiß so gut wie nichts über seine Interna.
touchhätte das funktionieren sollen. Übrigens wäre ein tragbarer Weg touch -r "$1" reference.tmp; mv -- "$1" "$2"; touch -r reference.tmp -- "$2"; rm reference.tmp.
statwar nicht tragbar.
touchnicht geklappt hat. Ist es dermvSchritt oder dertouchSchritt, der die Zeit der Unterverzeichnisse ändert? Welches Betriebssystem befindet sich auf dem NFS-Server und (falls bekannt) welcher Dateisystemtyp?