Переписал extfs для bsdtar.
089-upd-2008-sf38.pfs. Прикрутил к 7z и rar (т.е. тестируйте распаковкой таких архивов в mc)
Улучшения приветствуются
bsdtar может кучу
форматов tar, pax, cpio, zip, xar, lha, ar , cab, mtree, rar, iso
rar может, но не всякий и с
проблемамиСтарый мой вариант bsdtar0 вместо чтения содержимого архива распаковывал его в /tmp
#!/bin/sh
#210116 sfs
mcdpkg_deb_list () {
file "$1" |egrep '7-zip archive data, version 0.4$' >/dev/null && t=cat || t=tac
LC_TIME=C bsdtar -tvf "$1" |
awk '{
{cmd = "date -d \"" $6 " " $7 " "$8 "\" \"+%m-%d-%Y %H:%M:%S\""
cmd | getline d
cmd = "id -un $3"
cmd | getline u
cmd = "id -gn $4"
cmd | getline g
printf $1" 1"" "u" "g" "$5" "d" "$9}
for(i = 10; i <= NF; i++) { printf("%s ", " "$i) }
printf "\n"
}' |sed 's/[ \/]$//' | $t
}
mcdpkg_deb_copyout () {
bsdtar -xOf "$1" "$2" > "$3"
}
LC_ALL=C
cmd="$1"
shift
case "$cmd" in
list)
mcdpkg_deb_list "$@";
exit 0;;
copyout)
mcdpkg_deb_copyout "$@";
exit 0;;
esac
exit 1
C конвертацией bsdtar -tzvf в нужный mc формат пришлось заморочиться.
Можно использовать как пример для сложной awk обработки:
1. Использование внешних утилит внутри awk (cmd=) с полями awk в качестве аргументов
2. Разные обработки для разных полей (несколько print)
3. Вывод полей с 10 до конца строки for(i = 10; i <= NF; i++) { printf("%s ", " "$i) }
file "$1" |egrep '7-zip archive data, version 0.4$' >/dev/null && t=cat || t=tac - костыль для 7z архивов, созданных bsdtar. Если в списке папки после файлов - в mc видно как повторы. Вылечил чтением задом на перед (tac)