PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Alte Dateien und Verzeichnisse ins Archiv verschieben



AltBen
07.12.16, 10:36
Hallo Forumbewohner!

Ich hätte ein Anliegen, bei dem ich eure Hilfe bräuchte.

Ich habe hier auf meinem Linxserver (Debian) ein ca 3TB großes Archiv und möchte da ein bisschen ausmisten.

Ich bräuchte ein Script, welches überprüft, ob eine Datei schon x Tage (2 Jahre) nicht mehr geändert wurde, wenn ja, soll sie auf meine andere Platte verschoben werden. (Wird anschließend Archiviert).

An sich kein großes Problem. find ist da ja ganz gut drin. Problem ist, dass ich das ganze auch mit den Verzeichnissen bräuchte. Also möchte ich nicht einen Ordner mit 10000 Files, sondern diese sollen auch wieder auf der neuen Platte im entsprechenden Verzeichnis sein.

Habe ein bischen mit Shell-Scripten rumprobiert, komme da aber leider auf keinen grünen Zweig.

Ich danke euch für eure Hilfe!

LG. AltBen

marce
07.12.16, 10:50
auf den ersten Blick:
Suchen der Dateien mit find, Schleife drumherum, der Datei Pfad auf Ziel-Platte erstellen, Datei verschieben.

Wie sieht denn Dein Ansatz aus, wo hapert es?

fork
07.12.16, 11:04
Ungefähr so:



LAST_CHANGE_DAYS=730
cd /aktuelles/verzeichnis
find . -mtime +$LAST_CHANGE_DAYS \
| tee dateiliste.txt \
| tar -cf - -T - \
| tar -xvf - -C /archiv_verzeichnis

Das obige mal als Test. Es wird nur kopiert und nicht gelöscht. Wenn das dann so passt, hast Du in dateiliste.txt eine eine Liste von Dateien, die kopiert wurde und die Du dann in einem weiteren Schritt löschen kannst.

suleiman
07.12.16, 12:16
Lese ich richtig 3TB großes Archiv ... du meinst eine Datei ?

An deiner Stelle würde ich inkrementelle Backups machen und nicht alles in ein File archivieren.
Wenn die Datei oder die Festplatte irgendwo einen Fehler hat dann sind warscheinlich 3TB an Daten weg.

Anhand von inkremental Backups kann man auch schneller feststellen welche Dateien wie alt sind.


Ich habe nicht so den Plan welche Möglichkeiten es gibt, aber ich würde alles entpacken und dann auch mit find arbeiten.
Diese 3TB versuchen kleiner zu bekommen und danach wieder archivieren in mehrere Archive.
Ich vermute mal es könnten die Befehle -t und --index-file helfen um erstmal sich ein System auszudenken wie man diese Datenmenge beweltigen will.
Aber keine Garantie das mein Weg der richtige ist !

AltBen
07.12.16, 14:51
@suleiman Zum Verständniss: Ich habe keine 3TB große Archivdatei. Wir sprechen einfach so über das "Archiv". Einfach ein großer Hauptordner mit vielen Unterordnern, in denen sich dann wiederum Dateien und Unterordner befinden.

@fork Ja sowas in der Art, nur dass bei mir da dann folgendes kommt:



tar: Options '-f' and '-T' both want standard input
„tar --help“ oder „tar --usage“ gibt weitere Informationen.


Danke für die Hilfe!

fork
07.12.16, 15:39
tar: Options '-f' and '-T' both want standard input

Ähem. Ja. Wo tar recht hat hat es recht. Es muss natürlich heissen


tar -xvf - -C /archiv_verzeichnis

Habe es oben korrigiert.

suleiman
07.12.16, 16:13
Hast du das original Datum beibehalten beim erstellen der Backups?
Weil sonst sind die Dateien alle so alt wie das Archive wo du erstellt hast.

--atime-preserve
Zugriffszeiten für ausgegebene Dateien erhalten, entweder durch Wiederherstellen der Zeiten nach dem Lesen (METHOD='replace'; Vorgabe) oder durch Nicht-Setzen der Zeiten am ersten Ort (METHOD='system')

Des weiteren kenn ich keine Möglichkeit um das Datum aus Daten in Archiven auszulesen, ohne was endpacken zu müssen.

Hier mal der Code um ganze Verzeichnisse zu entpacken...


cd /Pfad/Zum/Backup
for ARCHIV in *.tgz ; do # Alle Archive im Verzeichnis ermitteln
tar -xpzf $ARCHIV -C /Pad/Zum/Entpacken # Alle Dateien entpacken
if [ -ne $? ] # Abfragen ob irgend ein Fehler aufgetrehten ist.
then
echo "Probleme mit Archive: ${ARCHIV}"
fi
done


Wenn inkrementelle Backups nutzt dann kannst --listed-incremental=/dev/null hinter dem Wort tar einfügen.
Damit werden bei doppelten Dateien nur noch die neuen entpackt.

Damit ist aber immer noch nicht geklärt wie du alte Dateien raus filterst.