bash :выключение :команда не найдена

Использование такой оболочки, как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
0
25.03.2021, 02:18
2 ответа

Двоичные файлы в каталогах /sbinи /usr/sbinпредназначены для запуска только суперпользователями/sudoers. Если вы хотите запустить что-нибудь там, добавьте к своей команде префикс sudo. Однако ваш пользователь должен быть членом группы sudoers.

$ sudo shutdown -P +0

Для проверки концепции попробуйте which shutdownvs sudo which shutdown.

1
28.04.2021, 22:56

Я установил «sudo» в Debian 11. Затем я снова попробовал «выключить -r сейчас», и проблема решилась.

0
17.11.2021, 11:33

Теги

Похожие вопросы