Code:
#!/bin/bash
cd "$1"
moveFiles()
{
current_dir=$1
find .tmpdir/ -type f | while read file
do
if du -s "$current_dir" "$file" | awk 'BEGIN {sum=0} {sum+=$1} END {if (sum > 4500000) exit(1) ; exit(0)}' > /dev/null
then
mv "$file" "$current_dir"
elif du -s "$current_dir" | awk '{if ($1 > 4500000) exit(1) ; exit(0)}' > /dev/null
then
[[ "$(find "$current_dir" -type f | wc -l)" -eq 0 ]] && { [[ -d ignored ]] || mkdir ignored || exit 1 ; mv "$file" ignored ; }
let current_dir++
echo $current_dir
mkdir "$current_dir"
fi
done
}
current_dir=1
mkdir .tmpdir || { echo .tmpdir existiert bereits! ; exit 1 ; }
find ! -name '.' ! -name '.tmpdir' -exec mv {} .tmpdir/ \;
mkdir "$current_dir"
until [ "$(find .tmpdir/ -type f | wc -l)" -eq 0 ]
do
current_dir=$(moveFiles $current_dir | tail -n1)
done
In einem Verzeichnis außerhalb der zu brennenden Daten abspeichern und mit "bash <Skript> <Pfad-zu-Dateien>" abspeichern, in den durchnummerierten Ordnern sind dann die Dateien in Bündeln a 4,5 GB.
Dateien, die selbst schon mehr als 4,5 GB haben, werden in den Ordner ignored verschoben.
BTW: Kann mir mal jemand erklären, warum current_dir immer zurückgesetzt wird, wenn man die Schleife in moveFiles verlassen hat (direkt nach do)? Ich hab beim Testen da ordentlich Probleme mit gekriegt.
Lesezeichen