Skip to content

Instantly share code, notes, and snippets.

@strizhechenko
Last active November 3, 2025 12:33
Show Gist options
  • Save strizhechenko/928073851fd9af4497207d63249061ed to your computer and use it in GitHub Desktop.
Save strizhechenko/928073851fd9af4497207d63249061ed to your computer and use it in GitHub Desktop.
Скрипт для закидывания наиболее близких к оригиналу ромов на флэшку с anbernic.
#!/bin/bash
set -euE
ARCHIVE_DIR="$1"
TARGET_DIR="$2"
mkdir -p "$TARGET_DIR"
# Это мои приоритеты, у вас могут быть свои, можно [T+Rus] на первое место поставить, например
priorities=('(U) [!]' '(E) [!]' '[T+Eng]' '[!]')
select_file() {
for pattern in "${priorities[@]}"; do
fgrep -m1 "$pattern" <<< "$1" && break
done
# Если ничего не попалось по шаблону пытаемся вообще без суффиксов
fgrep -v '[' <<< "$1" && return 0
# Если и такого нет - первый попавшийся
head -n1 <<< "$1"
return 0
}
for archive in "$ARCHIVE_DIR"*.7z; do
filename="${archive##*/}"
echo "Обработка: $filename"
# Мне не интересны хаки и другие файлы кроме .nes.
# Формат -slt даёт выхлоп Path = filename.nes (много строк). Нам интересны только filename.
nes_files="$(7z l -slt "$archive" | grep "\.nes$" | grep -v "Hack" | awk -F ' = ' '{print $2}')"
if [ "$(echo "$nes_files" | wc -l)" -eq 0 ]; then
echo " ❌ В архиве нет подходящих .nes файлов"
continue
fi
# Под регулярку priorities может попасть сразу несколько файлов. Берём первый из них.
selected_file="$(select_file "$nes_files" | head -n1)"
if [[ -z "${selected_file:-}" ]]; then
echo " ❌ Не удалось выбрать файл в архиве: $archive"
echo "$nes_files"
exit 1
fi
echo " ✅ Выбран файл: $selected_file"
# Распаковываем сразу в пункт назначения
7z x -o"$TARGET_DIR" "$archive" "$selected_file"
done
echo "Done."
exit 0
#!/bin/bash
set -euE
ARCHIVE_DIR="$1"
TARGET_DIR="$2"
mkdir -p "$TARGET_DIR"
# Это мои приоритеты, у вас могут быть свои, можно [T+Rus] на первое место поставить, например
priorities=('(U) [!]' '(E) [!]' '[T+Eng]' '[!]')
select_file() {
for pattern in "${priorities[@]}"; do
fgrep -m1 "$pattern" <<< "$1" && break
done
# Если ничего не попалось по шаблону пытаемся вообще без суффиксов
fgrep -v '[' <<< "$1" && return 0
# Если и такого нет - первый попавшийся
head -n1 <<< "$1"
return 0
}
for archive in "$ARCHIVE_DIR"*.7z; do
filename="${archive##*/}"
echo "Обработка: $filename"
# Мне не интересны хаки и другие файлы кроме .gen
# Формат -slt даёт выхлоп Path = filename.gen (много строк). Нам интересны только filename.
gen_files="$(7z l -slt "$archive" | grep "\.gen$" | grep -v "Hack" | awk -F ' = ' '{print $2}')"
if [ "$(echo "$gen_files" | wc -l)" -eq 0 ]; then
echo " ❌ В архиве нет подходящих .nes файлов"
continue
fi
# Под регулярку priorities может попасть сразу несколько файлов. Берём первый из них.
selected_file="$(select_file "$gen_files" | head -n1)"
if [[ -z "${selected_file:-}" ]]; then
echo " ❌ Не удалось выбрать файл в архиве: $archive"
echo "$gen_files"
exit 1
fi
echo " ✅ Выбран файл: $selected_file"
# Распаковываем сразу в пункт назначения
if [ "${DRY_RUN:-0}" != '1' ]; then
7z x -o"$TARGET_DIR" "$archive" "$selected_file"
# anbernic ждёт .md файлов, а не .gen. Формат один, расширения два. Это не markdown.
mv -v "$TARGET_DIR/$selected_file" "$TARGET_DIR/${selected_file%.gen}.md"
fi
done
echo "Done."
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment