Ich habe eine Reihe von Dateien, die alle mit der Konvention benannt sind file_[number]_[abcd].bin
(wobei [Nummer] eine Nummer im Bereich 0-Größe des Laufwerks in MB ist). dh es ist file_0_a.bin
, file_0_b.bin
, file_0_c.bin
und file_0_d.bin
und dann das 0
würde ein 1
und so weiter.
Die Anzahl der Dateien wird zur Laufzeit anhand der Größe der Partition ermittelt. Ich muss alle erstellten Dateien löschen, aber auf pseudozufällige Weise. Löschen Sie in Blöcken mit einer Größe, die ich angeben muss , dh wo 1024 Dateien vorhanden sind, 512 und dann weitere 512.
Ich habe derzeit die folgende Funktion, die ich die erforderliche Anzahl von Malen aufrufe, aber es wird zunehmend weniger wahrscheinlich, dass eine vorhandene Datei gefunden wird, bis zu dem Punkt, an dem sie möglicherweise nie vollständig ist. Offensichtlich ist dies etwas weniger als ideal.
Was ist eine andere Methode, mit der ich alle Dateien in zufälliger Reihenfolge löschen kann?
deleteRandFile() #$1 - total number of files
{
i=$((RANDOM%$1))
j=$((RANDOM%3))
file=""
case $j in
0)
file="${dest_dir}/file_${i}_a.bin";;
1)
file="${dest_dir}/file_${i}_b.bin";;
2)
file="${dest_dir}/file_${i}_c.bin";;
3)
file="${dest_dir}/file_${i}_d.bin";;
esac
if ! [[ -f $file ]]; then
deleteRandFile $1
else
rm $file
fi
return 0;
}
Bearbeiten: Ich versuche, in zufälliger Reihenfolge zu löschen, damit ich die Dateien so weit wie möglich fragmentieren kann. Dies ist Teil eines Skripts, das zunächst ein Laufwerk mit 1-MB-Dateien füllt und diese jeweils 1024 löscht und dann die Lücke mit 1 1-GB-Datei füllt. Spülen und wiederholen Sie den Vorgang, bis Sie einige sehr fragmentierte 1-GB-Dateien haben.
*.bin(o+functionName)
Notation wie in unix.stackexchange.com/a/9831 verwenden