Dateien bis zu einer bestimmtenVerzeichnisgröße verschieben

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Jogibär
Beiträge: 149
Registriert: 11.09.2002 22:43:37

Dateien bis zu einer bestimmtenVerzeichnisgröße verschieben

Beitrag von Jogibär » 12.07.2003 13:15:27

Hallo,

ich mache regelmäßig Sicherungen meiner Dateien und brenne sie auf DVD's.
Das will ich jetzt erheblich automatisieren.

Normalerweise benutze ich keine große Sicherungsdatei, wo alles drin ist, sondern mehrere kleine,die nach Datentypen benannt, und auf eine Größe geteilt sind.
Die Teilung lasse ich von Rar auf eine maximale Größe von 1GB automatisch ausführen.



Da mein DVD Brenner jetzt auch unter Linux problemlos läuft, und ich kompfortabel
aus einem Script her brennen kann, soll das daß Script auch noch übernehmen, und mir
nur noch sagen, wann ich die DVD wechseln soll.

Nun zum eigentlichen Problem:


Ich habe in meinem Sicherungsverzeichnis sagen wir mal so ca. 30 Dateien mit einer Gesamtgröße von 12 GB.

Das Script soll dann ein Unterverzeichnis ( DVD1) erstellen, und dann so viele Dateien hineinverschieben, bis 4,2 GB erreicht sind.

Dann soll es noch ein Unterverzeichnis ( DVD2 ) erstellen, und wieder so viele Dateien hineinverschieben, bis 4,2 GB erreicht sind.

usw.

Man könnte natürlich berechnen, welche Dateien mit welcher Größe am nächsten die 4,2 GB erreichen,aber mir ist es lieber, wenn die Teilarchive hintereinander liegen.
Dadurch wird die DVD zwar nicht maximal ausgenutzt, aber das will ich in Kauf nehmen.

Wie mache ich das jetzt am besten ??

ich danke euch für Eure Hilfe.

Jogibär

PS: multiCD und mondo kann ich nicht nutzen, da die noch ein Archiv erstellen würden

:roll:

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 12.07.2003 14:46:54

Hi Jogibär,

also wie du das genau machst hängt natürlich von der Script / Programmiersprache ab in der du das schreiben willst.

Ich würde das so machen, das er eine Datei nimmt, die Größe in einer Variablen speicher, die Datei in das Unterverzeichnis für die erste DVd kopiert und dann die 2. Datei nimmt, die Größe zu der Variablen hinzuaddiert und die Datei dann auch in das Unterverzeichnis kopiert. Bevor er immer die nächste Datei nimmt schaut er sich die Größe an die in der Variablen gespeichert ist und entscheidet dann ob er noch eine Datei hinzufügt oder die DVd brennt (wegen dem Platz würde ich erst die DVD brennen, das Verzeichnis löschen und dann die 2. DVD erstellen. Musst du dann natürlich noch so einrichten, das er weiß bis zu welcher Datei er gekommen ist (wenn du alle in einem Scriot machst sollte das kein Problem werden, weil du das Verzeichnis ja nur einmal öffnest).

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
Jogibär
Beiträge: 149
Registriert: 11.09.2002 22:43:37

Beitrag von Jogibär » 12.07.2003 17:30:40

Hallo,

Danke für deine Antwort.

Da ich die Dateien in das entsprechende Verzeichnis verschieben will, bräuchte ich
keine Liste, welche schon bearbeitet sind.

Ich habe schon einige Internetseiten abgegrast , aber wie ich die Dateigröße in eine Variable bekomme, habe ich noch nicht gefunden.

***

Bei vielen Anleitungen habe ich das Gefühl, das der Autor zeigen will, was er alles kann und wie er sehr umfangreiche Funktionen in nur eine Zeile bekommt
( mit 20 Klammern !! usw.).
Das sieht dann zwar wahnsinnig toll aus, aber ist schwer zu verstehen.

Wenn ich so meine C Programme schreiben würde, würde ich selbst nach 2 Wochen nicht mehr durchblicken.

***

Als Script will ich die bash benutzen.

Jogibär

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 12.07.2003 17:54:41

Bin gerade dabei etwas für dich zu basteln... Dauert aber noch ein wenig.

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 12.07.2003 21:24:35

Ok hier isses:

Code: Alles auswählen

#!/bin/sh

#Maximale Grösse für ein Verzeichnis
max=4100 

t=0
mkdir DVD0

for i in $(ls | grep -v DVD0)
do
	size=`du -m DVD$t | cut -f1`
	
	if [ $size -lt $max ]
	then
		mv $i DVD$t			
	else		
		t=`expr $t + 1`
		mkdir DVD$t
		mv $i DVD$t			
	fi
done
Das Ganze in deinem Sicherungsverzeichnis ausführen.

Benutzeravatar
Jogibär
Beiträge: 149
Registriert: 11.09.2002 22:43:37

Danke

Beitrag von Jogibär » 12.07.2003 23:21:26

Hallo Chimerer,

herzlich vielen Dank für dein Script.

Ich werde versuchen, es in den nächsten Tagen zu testen und die Funktion zu verstehen.

ich werde mich dann wieder melden.

mit freundlichen Grüßen

Jogibär

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 13.07.2003 01:51:29

Also wenn es nur eine Sicherungskopie sein soll, dann wäre hier

Code: Alles auswählen

if [ $size -lt $max ]
   then
      mv $i DVD$t
vielleicht ein cp $i DVD$t besser.
Wenn ich das richtig sehe, dann funktioniert das Script auch nur mit Datein, wenn noch Unterverzeichnisse in dem Verzeichnis sind, dann klappt das nicht (aber das sollte ja für dich reichen, Jogibär).

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 13.07.2003 03:50:51

Jep, aber das Script wird ja in dem Ordner mit den schon gesicherten Dateien ausgeführt, die müssen also nicht nochmal gesichert werden...
Wenn ich das richtig sehe, dann funktioniert das Script auch nur mit Datein, wenn noch Unterverzeichnisse in dem Verzeichnis sind, dann klappt das nicht (aber das sollte ja für dich reichen, Jogibär).
Ja, geht in der jetzigen Form nur mit Dateien, aber nach mehr war ja auch nicht gefragt. ;)

Gute Nacht

Antworten