Покладіть всі назви файлів у масив з назвою "файли" в 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()
...