Если вам нужно временно внести что-то в черный список или вы по какой-то причине предпочитаете использовать для этого Grub, вы также можете изменить параметры загрузки ядра, чтобы внести модуль в черный список:
vmlinuz ro rhgb quiet rdblacklist=<modulename>
Это можно сделать постоянным, добавив в /etc/default/grub вот такую строку:
GRUB_CMDLINE_LINUX="<existing boot options> rdblacklist=<modulename>"
А затем обновив конфигурацию загрузки с помощью
grub2-mkconfig -o /boot/grub2/grub.cfg
Однако обычно это должно быть последним средством для внесения чего-либо в черный список.
Как правило, не рекомендуется использовать выходные данные ls
в качестве входных данных.
Вы можете добиться желаемого с помощью небольшого скрипта:
#! /bin/sh
# file counter
cnt=0
# for each file (replace *.* by *.mp3 to restrict to some files)
for i in *.*
do
# create a number for 0 to 9 from the counter
a=$(( cnt%10 ))
# for 8 files on 10,
if [ $a -lt 8 ]
then
# move file to train folder (think to remove `echo`)
echo mv "$i" train/
# for one file on 10 (a is 8)
elif [ $a -lt 9 ]
then
# move file to dev folder (think to remove `echo`)
echo mv "$i" dev/
# for one file on 10 (a is 9)
else
# move file to test folder (think to remove `echo`)
echo mv "$i" test/
fi
# and update the counter
cnt=$((cnt+1))
done
Использование такой оболочки, какbash
:
#!/bin/bash
# Get all names.
# This assumes that *.mp3 matches only the things that we'd like to move.
names=( *.mp3 )
# Create our destination directories.
mkdir train dev test
# Calculate some numbers...
n=${#names[@]} # 100% of the files
# Six files at least are needed...
# (or one of the directories will be empty)
if [ "$n" -lt 6 ]; then
printf 'Only %d files\n' "$n"
exit 1
fi
n80=$(( (80*n)/100 )) # 80% of the files
n10=$(( (n - n80)/2 )) # 10% of the files
# Move the files...
mv "${names[@]:0:n80}" train # Move the 80%
mv "${names[@]:n80:n10}" dev # Move the 10%
mv "${names[@]:n80+n10}" test # Move the rest
Это читает имена файлов, которые мы хотели бы переместить в массив с именем names
. Предполагается, что используемый шаблон *.mp3
будет соответствовать только и всем интересующим нас именам (модифицировать этот шаблон под свои нужды ).
Затем вычисляются длины 80% и 10% этого массива.
Перемещение файлов выполняется с помощью фрагментов массива (вbash
). Срез ${arr[@]:offset:length}
представляет собой срез от нуля -, основанного на смещении offset
длины length
. Если аргумент length
отсутствует (, как в последнем вызове mv
), срез выполняется до конца массива.
Количество файлов, которые попадают в каждый каталог, очевидно, будет немного приблизительным из-за того, что мы не готовы разбивать файлы на два (целочисленных арифметических ). Каталог test
, скорее всего, получит на один файл больше, чем dev
, если число файлов не делится без остатка.
Это также зависит от того, что имена файлов достаточно короткие, чтобы 80% файлов можно было переместить за одну операцию. Если это не так, вам придется изменить последние три строки (mv
строки )на
for name in "${names[@]:0:n80}"; do
mv "$name" train
done
for name in "${names[@]:n80:n10}"; do
mv "$name" dev
done
for name in "${names[@]:n80+n10}"; do
mv "$name" test
done