summaryrefslogtreecommitdiff
path: root/.local/share/mc/extfs.d/ganneff
blob: 56885daa53a4c720c7dbb1e3c695ddbd87519491 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#! /bin/bash

set -e
set -u
set -E

# (C) 2011 Joerg Jaspert <joerg@debian.org>
# GPLv2, no later

LC_ALL=C
export LC_ALL=C

function dofslist () {
    case "$1" in
        *.lzma) ZCAT="lzma -dc" ;;
        *.xz)   ZCAT="xz -dc"   ;;
        *.bz2)  ZCAT="bzip2 -dc";;
        *.gz)   ZCAT="gzip -dc" ;;
        *.z)    ZCAT="gzip -dc" ;;
        *.Z)    ZCAT="gzip -dc" ;;
        *)      ZCAT="cat"      ;;
    esac

    $ZCAT "$1" | tar tvvf - | 
    while read MODE OWNER SIZE DATE TIME NAME LINK; do
        # Filter out directories. They would be empty anyways
        if [[ ${MODE} =~ ^d.* ]]; then
            continue
        fi
        OUTLINE="${MODE}"                    # permission string
        OUTLINE="${OUTLINE} 1"             # number of links. definitely wrong right now
        OUTLINE="${OUTLINE} ${OWNER%%/*}"    # file owner
        OUTLINE="${OUTLINE} ${OWNER##*/}"    # file group
        OUTLINE="${OUTLINE} ${SIZE}"         # file size
        if [[ ${DATE} =~ ([0-9]{4})-([0-9]{2})-([0-9]{2}) ]]; then
            DATE="${BASH_REMATCH[2]}-${BASH_REMATCH[3]}-${BASH_REMATCH[1]}"
        fi
        OUTLINE="${OUTLINE} ${DATE} ${TIME}" # file date/time
#        NAME=${NAME#*/}
        OUTLINE="${OUTLINE} ${NAME//\//\\}"         # filename
        OUTLINE="${OUTLINE} "               # filepath

        if [[ "${LINK}" =~ "^->.*" ]]; then
            OUTLINE="${OUTLINE} ${LINK}"
        fi
        echo ${OUTLINE}
    done
}

function docopyout () {
    case "$2" in
        *.lzma) ZCAT="lzma -dc" ;;
        *.xz)   ZCAT="xz -dc"   ;;
        *.bz2)  ZCAT="bzip2 -dc";;
        *.gz)   ZCAT="gzip -dc" ;;
        *.z)    ZCAT="gzip -dc" ;;
        *.Z)    ZCAT="gzip -dc" ;;
        *)      ZCAT="cat"      ;;
    esac
    NAME=${3//\\/\/}
    $ZCAT "$2" | tar -xO "$NAME" > "$4"
}

case "$1" in
    list)
        dofslist "$2" | sort -k 8;
        exit 0
        ;;
    copyout)
        docopyout "$@"
        exit 0
        ;;
esac
exit 1