Ordner aufteilen

Datum: 2003-01-06
Quelle: suse-linux

Worum ging es?

Ein großes Dateiverzeichnis soll in kleinere Ordner mit einer maximalen Größe (im Beispiel 700 MB) aufgeteilt werden - praktisch z. B. vor dem Brennen von CDs.

Code
# erstes Zielverzeichnis anlegen / create first destination directory
src=1
mkdir /path/to/destination/dir$src
# Variable fuer Dateigroesse / variable to hold directory size
sum=0
# Variable fuer max. Groesse / variable defining maximum size
max=`expr 700 \* 1024 \* 1024`
# in das Quellverzeichnis wechseln / change into source directory
cd /source_dir
# Schleife ueber alle Dateien / loop over all files
for i in *; do
  # Groesse der Dateien summieren / add file sizes
  sum=`expr $sum + \`ls -l "$i" | awk ' { print $5 } '\``
  # Datei verschieben / move file
  mv "$i" "/path/to/destination/dir$src/"
  # max. Summe ueberschritten? Neues Zielverzeichnis, summe reset
  # maximum size exceeded? new destination, reset sum
  if test $sum -ge $max; then
    src=`expr $src + 1`
    mkdir /path/to/destination/dir$src
    sum=0
  fi
done
Beschreibung

Es fehlen noch die ganzen Prüfungen auf Fehler, es werden keine Dateien erwischt, die mit einem Punkt beginnen - also nur als Gerüst, wie man es machen kann.
Man kann die Schleife so verändern, dass der test und das Wechseln des Zielverzeichnisses vor dem Verschieben der Datei gemacht wird, dann hat man in den Zielverzeichnissen immer weniger als die max. Größe. Dann muss man aber dafür sorgen, dass nicht eine Monsterdatei schon allein größer als die maximale Verzeichnisgröße ist, das würde in einer Endlosschleife enden (oder eben nicht enden ;-), die laufend neue Zielverzeichnisse erzeugt.