Поместите все имена файлов в массив с именем "files" в bash:
files=( * )
размер массива:
echo ${#files[@]}
определите 2/3 из них как размер выборки:
take=$((2*${#files[@]}/3))
for i in $(seq 1 $take)
do
r=$((RANDOM%${#files[@]}))
echo ${files[r]}
done
Это будет выбрать дубликаты, и это не протестировано с именами файлов с пробелами и такими.
Самый простой способ избежать дублирования - перебирать все файлы и выбирать каждый с вероятностью 2/3, но это не обязательно приведет к 200 файлам.
Это удалит файл, если он был выбран из списка, и выполнит ваши требования:
#!/bin/bash
files=( * )
# define 2/3 of them as sample size:
take=$((2*${#files[@]}/3))
while (( i < $take ))
do
r=$((RANDOM%${#files[@]}))
f=${files[r]}
if [[ -n $f ]]
then
i=$((i+1))
echo ${files[r]}
unset files[r]
fi
done
list.files()
...