Pro-Linux.de

Pro-Linux

Pro-Linux Diskussions- und Hilfeforum
Aktuelle Zeit: 17. Dez 2018 16:49

Alle Zeiten sind UTC+01:00




Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 09. Okt 2005 2:38 
Offline

Registriert: 02. Mai 2005 9:17
Beiträge: 3
Ich suche ein Programm um mehr als 20GB Daten automatisch und nicht komprimiert auf mehrere Medien zu brennen


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 09. Okt 2005 9:47 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 05. Mai 2004 7:35
Beiträge: 1238
Also das geht auf jeden Fall mit einen Shellskript. Ich melde mich später nochmal wieder.

Kann man davon ausgehen, dass die Dateien in mehreren Unterverzeichnissen vergraben sind?


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 09. Okt 2005 11:34 
Offline

Registriert: 02. Mai 2005 9:17
Beiträge: 3
Ja, und die Verzeichnisse dürfen nicht geteilt werden


Nach oben
   
 Betreff des Beitrags:
BeitragVerfasst: 10. Okt 2005 16:45 
Offline
prolinux-forum-admin
Benutzeravatar

Registriert: 05. Mai 2004 7:35
Beiträge: 1238
Hi

Also... ich hab das noch nicht hingekriegt, aber wenn jemand will, kann er ja mal einen Blick reinwerfen. Das ist alles noch sehr hässlich und funktioniert nicht und bla, aber es drückt vielleicht einen Grundgedanken aus - vielleicht suchst du aber einfach weiter nach was Existentem...
Code:
#!/bin/bash

function save_dir(){
	dir=$1
	file_list_prefix=$2
	todo_list_prefix=$3
	MED_SIZE=$4
	index=$5

	list_size=0
	
	index=$[$index+1]
	matching_element_ignored=0
	
	file_list="$file_list_prefix"."$index"
	todo_list="$todo_list_prefix"."$index"
	next_todo_list="$todo_list".next
	
	ls -A $dir >> $todo_list
	
	matching_element_ignored=create_list $file_list $todo_list $next_todo_list $MED_SIZE

	while [ "$matching_element_ignored" -eq 1 ]; do
		$matching_element_ignored=0
		
		mv "$next_todo_list" "$todo_list"

		# Auf der todo-Liste befinden sich noch Elemente,
		# welche klein genug sind, um gesichert zu werden
		
		index=$[$index+1]
		file_list="$file_list_prefix"."$index"

		matching_element_ignored=create_list $file_list $todo_list $next_todo_list $MED_SIZE
	done
	
	# Alles was jetzt noch in todo_list steht, sind Verzeichnisse,
	# welche zu gross sind, um sie sofort zu sichern
	# Diese werden jetzt auch noch gesichert:
	
	rm $next_todo_list
	rm $todo_list
	
	for subdir in $(cat $todo_list); do
		save_dir $subdir, $file_list_prefix $todo_list_prefix $MED_SIZE $index
	done
	
}

function create_list(){
	file_list=$1
	todo_list=$2
	next_todo_list=$3
	MED_SIZE=$4

	# Fuer jede Datei und jedes Verzeichnis
	for element in $(cat $todo_list); do
		if_file=0
		cd $element || is_file=1
		
		if [ "$is_file" -eq 0 ]; then
			cd $dir
		fi
	
		# Bestimme die Groesse des Elements
		element_size = $(du -s $element | awk ' { print $1 } ')
		
		if [ $[$list_size + $element_size] -gt $MED_SIZE ]; then
			# Fuege es zur todo-Liste hinzu, wenn es
			# fuer die aktuelle Liste zu gross ist
			# Aber nur dann, wenn es keine Datei ist,
			# welche groesser als MED_SIZE ist

			
			if [ $is_file -eq 0 -o $element_size -le $MED_SIZE ]; then
				echo "$dir"/"$element" >> $next_todo_list
			else
				echo "file $element is too large to be saved!"
			fi
			
			# und notiere, wenn es insgesamt klein genug ist,
			# um gesichert zu werden.
			matching_element_ignored=1
			
		else
			# Ansonsten fuege es zur aktuellen Liste hinzu
			$list_size = $[$list_size + $element_size]
			echo "$dir"/"$element" >> $file_list
		fi
	done
	
	return $matching_element_ignored
}



# Elemente werden mit Newline getrennt
IFS="
"

# Gibt die Groesse der Sicherunsmedien in Byte an
MED_SIZE=700*1024*1024   # 700 MB

# Temporaeres Verzeichnis
TMP_DIR=/tmp

# Zu sicherndes Verzeichnis
SAVE_DIR=/usr/ports/distfiles

# Optionen fuer mkisofs
MKISOFS_OPT="-r"

# Optionen fuer cdrecord
CDRECORD_OPT="-dev=/dev/cdrw speed=8 -eject"



date=$(date +%s)

file_list_prefix="$TMP_DIR"/backup."$date".list
todo_list_prefix="$TMP_DIR"/backup."$date".todo

save_dir $SAVE_DIR $file_list_prefix $todo_list_prefix $MED_SIZE 0

exit 0

# Erzeuge die Medien
for file in $(ls "$file_list_prefix"*); do
	echo "I'm going to write all files in $file now."
	echo ""
	echo Please insert a medium and press any key
	read
	cat file | xargs mkisofs $MKISOFS_OPT | cdrecord $CDRECORD_OPT
done

exit 0


Nach oben
   
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen  Auf das Thema antworten  [ 4 Beiträge ] 

Alle Zeiten sind UTC+01:00


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.
Sie dürfen keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Limited
Deutsche Übersetzung durch phpBB.de