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
|