Как эффективнее перемешать массив?
Тут код и рандомим один за другим символы в REGEX-маске. До тех пор, пока не будет пустой возврат.
Из предыдущей выборки - берём случайный вариант.

НО! Лучше - это делать через файл-список (который содержит уже весь dirlist).
Это сэкономит операции на чтение с диска и продлит срок его службы.
PS: Подсказка!: файл dirlist можно читать сразу со случайного места! и смещаться на начало строки!
Запускать 2 рандома.
1 с директориями от 1-5. Записать /бд /csv/ соответствие порядковому номеру и рандомиь уже цифры, подменяя их на id записи / строки =>   читать конкретную запись.