
Сообщение от
JeRrS
посчитать свободное пространство в зависимости от того сколько по итогу записано на дискете. Возможно ли как-то через поиск отсортировать таким образом чтобы можно было по итогу просматривать от наименьшей заполненности?
Вот bash скрипт, который читает в образе переменную в которой хранится число свободных секторов и сортирует по убыванию. Скрипту указываем параметром папку в которой искать TRD файлы, он начиная с этой папки ищет файлы во всех подпапках и zip архивах:
Код:
#!/usr/bin/env bash
# Проверяем, передан ли путь к папке
if [ -z "$1" ]; then
echo "Usage: $0 <directory>"
exit 1
fi
dir="$1"
declare -a files
# Ищем файлы .TRD в папке и в архивах ZIP
while IFS= read -r -d '' file; do
files+=("$file")
done < <(find "$dir" -type f \( -name "*.TRD" -o -name "*.trd" \) -print0)
while IFS= read -r -d '' zipfile; do
while IFS= read -r trdfile; do
tmpfile=$(mktemp)
unzip -p "$zipfile" "$trdfile" > "$tmpfile"
files+=("$tmpfile|$zipfile:$trdfile")
done < <(unzip -l "$zipfile" | awk '{print $4}' | grep -i '\.trd$')
done < <(find "$dir" -type f -name "*.zip" -print0)
declare -A values
for file in "${files[@]}"; do
if [[ "$file" == *"|"* ]]; then
# Файл временный, извлечён из ZIP
filepath="${file%%|*}"
displayname="${file#*|}"
else
filepath="$file"
displayname="$file"
fi
if [[ -f "$filepath" ]]; then
value=$(xxd -p -s 0x8e5 -l 2 "$filepath" | xxd -r -p | od -An -tu2)
values["$displayname"]=$((value))
fi
[[ "$file" == *"|"* ]] && rm -f "$filepath"
done
# Сортируем и выводим
for file in "${!values[@]}"; do
printf "%4d %s\n" "${values[$file]}" "$file"
done | sort -nr
Пример вывода:
Код:
$ ./trdsort.sh TRD/
2306 TRD/RANGERS_trd.zip:RANGERS.trd
2259 TRD/trdn0764b_trd.zip:trdn0764b.trd
2237 TRD/VTRDOS/Trnt_GST_trd.zip:21_Trantor.trd
1963 TRD/SuperMarioBros128K.trd.zip:output.trd
201 TRD/disk048.trd
127 TRD/Wolfenstein2004.trd.zip:WOLF2OO4.TRD
127 TRD/WOLF2OO4.TRD
83 TRD/DIZZY.zip:DIZZY.TRD
Это то значение которое TR-DOS выдает по команде CAT как Free.
Но, как писал, бывает много дисков с защитами, которые записаны нестандартно и в них может быть число свободных секторов от балды указано.