Tôi có một tập hợp các tệp, tất cả được đặt tên theo quy ước file_[number]_[abcd].bin
(trong đó [số] là một số trong phạm vi kích thước 0 của ổ đĩa tính bằng MB). tức là có file_0_a.bin
, file_0_b.bin
, file_0_c.bin
và file_0_d.bin
sau đó là 0
sẽ trở thành một 1
và vân vân.
Số lượng tệp được tìm ra tại thời điểm chạy dựa trên kích thước của phân vùng. Tôi cần xóa tất cả các tệp đã được tạo, nhưng theo cách giả ngẫu nhiên. trong các khối có kích thước mà tôi cần để có thể chỉ định , tức là nơi có 1024 tệp, xóa 512, sau đó xóa 512 khác.
Tôi có chức năng sau đây để thực hiện nó, cái mà tôi gọi là số lần cần thiết, nhưng nó sẽ dần dần ít có khả năng tìm thấy một tệp tồn tại, đến mức mà nó có thể không bao giờ hoàn thành. Rõ ràng, điều này có phần ít hơn lý tưởng.
Phương pháp khác mà tôi có thể sử dụng để xóa tất cả các tệp theo thứ tự ngẫu nhiên là gì?
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;
}
Chỉnh sửa: Tôi đang cố gắng xóa theo thứ tự ngẫu nhiên để tôi có thể phân chia các tệp nhiều nhất có thể. Đây là một phần của tập lệnh bắt đầu bằng cách lấp đầy ổ đĩa với các tệp 1MB và xóa chúng, 1024 tại một thời điểm, sau đó lấp đầy 'khoảng trống' với tệp 1 1GB. Rửa sạch và lặp lại cho đến khi bạn có một số tệp 1GB rất phân mảnh.
*.bin(o+functionName)
ký hiệu như trong unix.stackexchange.com/a/9831