60 lines
1.4 KiB
Bash
Executable File
60 lines
1.4 KiB
Bash
Executable File
#!/bin/bash
|
|
# Needs mtd-tools with jffs2reader
|
|
|
|
if [ ! -f "$1" ]; then
|
|
echo "Syntax: $0 JFFS2IMAGE"
|
|
exit 1
|
|
fi
|
|
|
|
BASENAME=`basename "$1"`
|
|
OUTDIR="./${BASENAME}_unpack/"
|
|
mkdir $OUTDIR
|
|
|
|
while read -u3 line; do
|
|
# echo "Line: $line"
|
|
PERMS=`echo $line | cut -d" " -f1`
|
|
SIZE=`echo $line | cut -d" " -f5`
|
|
FILE=`echo $line | cut -d" " -f6`
|
|
TYPE=${PERMS:0:1}
|
|
PERMS=${PERMS:1}
|
|
# echo "P:$PERMS S:$SIZE F:$FILE T:$TYPE"
|
|
|
|
if [ "${FILE:0:1}" == "/" ]; then
|
|
FILE=${FILE:1}
|
|
fi
|
|
|
|
PERMSU=`echo "${PERMS:0:3}" | sed 's/-//g'`
|
|
PERMSG=`echo "${PERMS:3:3}" | sed 's/-//g'`
|
|
PERMSO=`echo "${PERMS:6:3}" | sed 's/-//g'`
|
|
|
|
FULLPERMS="u=$PERMSU,g=$PERMSG,o=$PERMSO"
|
|
|
|
OUTFILE="$OUTDIR$FILE"
|
|
|
|
case "$TYPE" in
|
|
"d")
|
|
OUTFILE="$OUTDIR$FILE"
|
|
echo "DIR: $FILE ($FULLPERMS) --> $OUTFILE"
|
|
mkdir "$OUTFILE"
|
|
chmod $FULLPERMS "$OUTFILE"
|
|
;;
|
|
|
|
"l")
|
|
LINKTARGET=`echo $line | cut -d" " -f8`
|
|
echo "Symlink: $FILE --> $LINKTARGET"
|
|
ln -s $LINKTARGET "$OUTFILE"
|
|
;;
|
|
|
|
"-")
|
|
echo "FILE: $FILE ($SIZE bytes, $FULLPERMS)"
|
|
jffs2reader "$1" -f "$FILE" > $OUTFILE
|
|
chmod $FULLPERMS "$OUTFILE"
|
|
;;
|
|
|
|
*)
|
|
echo "UNKNOWN!!!!!!! ($line)"
|
|
;;
|
|
esac
|
|
|
|
done 3< <(jffs2reader "$1")
|