Недавно я столкнулся с той же проблемой. (т.е. изначально у меня был отдельный раздел с установленной Ubuntu, двойная загрузка из меню grub. Затем я удалил этот раздел Ubuntu из управления дисками Windows, а когда я перезагрузился, просто меню команд grub).
Что я сделал, чтобы вернуться к Windows 10:
Ctrl
+ Alt
+ Delete
для перезагрузки. Во время перезагрузки удерживайте кнопку shift
. F12
для загрузки. Я нажал F12
, и он возвращает мне меню с диспетчером загрузки Windows. С zsh
:
files=(???-??-*.avi)
for prefix (${(Mu)files#???-??-}) encode $prefix*.avi
(или кодировать ${(M)files:#$prefix*}
)
Эквивалент с оболочкой GNU ( bash
), а инструменты будут такими:
while IFS= read -u3 -rd '' prefix; do
encode "$prefix-"*.avi 3<&-
done 3< <(printf '%s\0' ???-??-*.avi | grep -oz '^...-..-' | sort -zu)
Тот же принцип. Получаем список файлов, соответствующих шаблону ???-??-*.avi
в текущем каталоге, извлекаем часть, соответствующую ((M)
/grep -o
) ???-??-
(regexp ...-..-
), уникален их ((u)
/sort -u
), а затем зациклиться на этом списке префиксов.
Возможно, не очень умное решение:
сравнивать символы последнего цикла:
last=""
лс -1 $1 | сортировать | при чтении файла; делать
суб=${файл:0:3}
[ "$last" != "$sub" ] && { echo "НОВАЯ ГРУППА"; последний = "$ под"; }
эхо "[$sub] $файл"
Выполнено
Вместо эха собирайте имена файлов внутри массива...
Просто идея... пример вывода:
NEW GROUP
[Hi8] Hi8-01-002.avi
NEW GROUP
[VHS] VHS-01-001.avi
[VHS] VHS-01-002.avi
[VHS] VHS-02-002.avi
NEW GROUP
[XZU] XZU
Редактировать 1: на основе ответа Anthony Geoghegan избегайте труб в начале цикла и используйте подстановку bash. Взгляните на его комментарий.
Улучшенный скрипт:
last=""
for file in *avi; do
sub=${file:0:3}
[ "$last" != "$sub" ] && { echo "NEW GROUP"; last="$sub"; }
echo "[$sub] $file"
done
Редактировать 2:
как спросил @ Tony Tan в его третьем комментарии: здесь вы найдете прямое решение для анализа собранных имен файлов в функцию. Есть много способов сделать это. И у меня нет большого опыта в сценариях bash...;)
#!/bin/bash
SOURCE_DIR="$1"
cd "$SOURCE_DIR" || { echo "could not read dir '$SOURCE_DIR'"; exit 1; }
function parseFiles() {
echo "parsing files:"
echo "$1"
}
last=""
declare -a fileGroup
for file in *avi; do
# first 3 chars of filename
sub=${file:0:3}
if test -z "$last"; then
# last is empty. first loop
last="$sub"
elif test "$last" != "$sub"; then
# new file group detected, parse collected
parseFiles "${fileGroup[*]}"
# reset array
fileGroup=()
last="$sub"
fi
# append name to array
fileGroup[${#fileGroup[@]}]=$file
done
parseFiles "${fileGroup[*]}"