wok annotate xarchive/stuff/slitaz-wrap.sh @ rev 24989

updated nfs-utils (2.4.3 -> 2.6.1)
author Hans-G?nter Theisgen
date Thu May 12 17:03:36 2022 +0100 (2022-05-12)
parents 055ed706128d
children
rev   line source
pascal@688 1 #!/bin/sh
pascal@4909 2 #
pascal@4909 3 # slitaz-wrap.sh - slitaz core wrapper for xarchive frontend
pascal@4909 4 # Copyright (C) 2005 Lee Bigelow <ligelowbee@yahoo.com>
pascal@4909 5 # Copyright (C) 2010 Pascal Bellard <pascal.bellard@slitaz.org>
pascal@4909 6 #
pascal@688 7 # This program is free software; you can redistribute it and/or modify
pascal@688 8 # it under the terms of the GNU General Public License as published by
pascal@688 9 # the Free Software Foundation; either version 2 of the License, or
pascal@688 10 # (at your option) any later version.
pascal@4909 11 #
pascal@688 12 # This program is distributed in the hope that it will be useful,
pascal@688 13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
pascal@688 14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
pascal@688 15 # GNU General Public License for more details.
pascal@4909 16 #
pascal@688 17 # You should have received a copy of the GNU General Public License
pascal@688 18 # along with this program; if not, write to the Free Software
pascal@688 19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
pascal@688 20
pascal@4909 21 UNSUPPORTED=65
pascal@688 22
pascal@4909 23 GZIP_EXTS="tar.gz tgz cpio.gz"
pascal@688 24 LZMA_EXTS="tar.lz tar.lzma tlz"
pascal@688 25 BZIP2_EXTS="tar.bz tbz tar.bz2 tbz2"
pascal@4909 26 COMPRESS_EXTS="tar.z tar.Z"
pascal@4909 27 TAR_EXTS="tar tar.gz tgz $LZMA_EXTS $BZIP2_EXTS $COMPRESS_EXTS"
pascal@4355 28 XZ_EXTS="tar.xz txz"
pascal@4955 29 LRZIP_EXTS="tar.lrz tlrz"
pascal@2080 30 IPK_EXTS="ipk"
pascal@4909 31 CPIO_EXTS="cpio cpio.gz"
pascal@4355 32 CPIOXZ_EXTS="cpio.xz"
pascal@4955 33 CPIOLRZIP_EXTS="cpio.lrz"
pascal@688 34 ZIP_EXTS="zip cbz jar"
pascal@688 35 RPM_EXTS="rpm"
pascal@4909 36 DEB_EXTS="deb udeb"
pascal@3530 37 TAZPKG_EXTS="tazpkg spkg"
pascal@942 38 ISO_EXTS="iso"
pascal@4909 39 SQUASHFS_EXTS="sfs sqfs squashfs"
pascal@4909 40 CROMFS_EXTS="cfs cromfs"
pascal@17256 41 FAT_EXTS="dos fat vfat"
pascal@17256 42 EXT2_EXTS="ext2 ext3 ext4"
pascal@17256 43 FS_EXTS="$EXT2_EXTS $FAT_EXTS xfs fd fs loop"
pascal@943 44 CLOOP_EXTS="cloop"
pascal@2877 45 RAR_EXTS="rar cbr"
pascal@2877 46 LHA_EXTS="lha lzh lzs"
pascal@3194 47 LZO_EXTS="lzo"
pascal@4909 48 ARJ_EXTS="arj pak arc j uc2 zoo"
pascal@19373 49 NZ_EXTS="nz"
pascal@17256 50 _7Z_EXTS="7z bcj bcj2 wim $BZIP2_EXTS $ZIP_EXTS $XZ_EXTS"
pascal@17256 51 _7Z_EXTS_X="chm cramfs dmg hfs mbr msi nsis ntfs udf vhd xar arj cab lzh rar \
pascal@17256 52 udf cpio $ISO_EXTS $FAT_EXTS $SQUASHFS_EXTS"
pascal@17380 53 ZPAQ_EXTS="zpaq"
pascal@688 54
pascal@4909 55 while read var progs; do
pascal@4909 56 eval $var=""
pascal@4909 57 for i in $progs; do
pascal@4909 58 [ "$(which $i)" ] || continue
pascal@4909 59 eval $var="$i"
pascal@4909 60 break
pascal@4909 61 done
pascal@4909 62 done <<EOT
pascal@4909 63 AWK_PROG mawk gawk awk
pascal@4909 64 XTERM_PROG xterm rxvt xvt wterm aterm Eterm false
pascal@4909 65 EOT
pascal@688 66
pascal@4909 67 # the shifting will leave the files passed as all the remaining args "$@"
pascal@688 68 opt="$1"
pascal@4909 69 archive="$2"
pascal@5209 70 lc="$(echo $2|tr [:upper:] [:lower:])"
pascal@4909 71 shift 2
pascal@688 72
pascal@5209 73 in_exts()
pascal@5209 74 {
pascal@5209 75 for i in $@; do
pascal@5209 76 [ $(expr "$lc" : ".*\."$i"$") -gt 0 ] && break
pascal@5209 77 done
pascal@5209 78 }
pascal@5209 79
pascal@2877 80 tazpkg2cpio()
pascal@2877 81 {
pascal@4909 82 tmp="$(mktemp -d -t tmpcpio.XXXXXX)"
pascal@4909 83 case "$(cd $tmp; cpio -iv < "$1")" in
pascal@5167 84 *lzma*) unlzma -c $tmp/fs.cpio.lzma;;
pascal@5167 85 *gz*) zcat $tmp/fs.cpio.gz
pascal@4909 86 esac
pascal@4909 87 rm -rf $tmp
pascal@2877 88 }
pascal@2877 89
pascal@2080 90 decompress_ipk()
pascal@2080 91 {
pascal@4909 92 tar xOzf "$1" ./data.tar.gz | gzip -dc
pascal@2080 93 }
pascal@2080 94
pascal@4909 95 # variables for our compression functions.
pascal@688 96 DECOMPRESS="cat"
pascal@688 97 COMPRESS="cat"
pascal@4909 98 while read d c exts; do
pascal@5209 99 in_exts $exts || continue
pascal@20892 100 [ "$d" = "${d% *}" -o "$(which ${d% *})" ] || exit $UNSUPPORTED
pascal@5209 101 DECOMPRESS="$d"
pascal@5209 102 COMPRESS="$c"
pascal@5209 103 [ "$(which ${c% *})" ] || COMPRESS="false"
pascal@5209 104 break
pascal@4909 105 done <<EOT
pascal@4909 106 unlzma\ -c lzma\ e\ -si\ -so $LZMA_EXTS
pascal@4909 107 bunzip2\ -c bzip2\ -c $BZIP2_EXTS
pascal@4909 108 gzip\ -dc gzip\ -c $GZIP_EXTS
pascal@4909 109 xz\ -dc xz\ -c $XZ_EXTS $CPIOXZ_EXTS
pascal@4954 110 lrzip\ -d lrzip $LRZIP_EXTS $CPIOLRZIP_EXTS
pascal@4909 111 uncompress\ -dc compress\ -c $COMPRESS_EXTS
pascal@4909 112 rpm2cpio false $RPM_EXTS
pascal@4909 113 tazpkg2cpio false $TAZPKG_EXTS
pascal@4909 114 decompress_ipk false $IPK_EXTS
pascal@4909 115 EOT
pascal@688 116
pascal@688 117 decompress_func()
pascal@688 118 {
pascal@4909 119 [ "$DECOMPRESS" = "cat" ] && return
pascal@4909 120 tmp="$(mktemp -t tartmp.XXXXXX)"
pascal@4909 121 [ -f "$archive" ] && $DECOMPRESS "$archive" > "$tmp"
pascal@4909 122 # store old name for compress_func
pascal@4909 123 oldarch="$archive"
pascal@4909 124 # change working file
pascal@4909 125 archive="$tmp"
pascal@688 126 }
pascal@688 127
pascal@688 128 compress_func()
pascal@688 129 {
pascal@4909 130 status=$?
pascal@4909 131 if [ "$COMPRESS" != "cat" -a -n "$oldarch" ]; then
pascal@4909 132 [ -f "$oldarch" ] && rm "$oldarch"
pascal@4909 133 $COMPRESS < "$archive" > "$oldarch" && rm "$archive"
pascal@4909 134 fi
pascal@4909 135 exit $status
pascal@688 136 }
pascal@688 137
pascal@2877 138 addcpio()
pascal@2877 139 {
pascal@4909 140 find $@ | cpio -o -H newc
pascal@2877 141 }
pascal@2877 142
pascal@4909 143 a_file()
pascal@2877 144 {
pascal@4909 145 ( cd $2 ; tar -cf - $1 ) | tar -xf -
pascal@2877 146 }
pascal@2877 147
pascal@4909 148 r_file()
pascal@941 149 {
pascal@4909 150 rm -rf ./$1
pascal@941 151 }
pascal@941 152
pascal@4909 153 dpkg_c()
pascal@941 154 {
pascal@4909 155 dpkg-deb -c "$archive"
pascal@941 156 }
pascal@941 157
pascal@942 158 loop_fs()
pascal@942 159 {
pascal@4909 160 [ "$1" = "-n" ] && retrun
pascal@4909 161 cmd=$1
pascal@4909 162 shift
pascal@4909 163 tmp="$(mktemp -d -t fstmp.XXXXXX)"
pascal@4914 164 while read command umnt exts; do
pascal@5209 165 in_exts $exts || continue
pascal@5209 166 $command "$archive" $tmp
pascal@5209 167 break
pascal@4909 168 done <<EOT
pascal@4909 169 cromfs-driver fusermount\ -u $CROMFS_EXTS
pascal@4909 170 mount\ -o\ loop=/dev/cloop,ro umount\ -d $CLOOP_EXTS
pascal@4909 171 mount\ -o\ loop,rw umount\ -d $FS_EXTS
pascal@4909 172 mount\ -o\ loop,ro umount\ -d $ISO_EXTS $SQUASHFS_EXTS
pascal@4909 173 EOT
pascal@4909 174 rmdir $tmp 2> /dev/null && return
pascal@4909 175 case "$cmd" in
pascal@4909 176 -o) find $tmp | while read f; do
pascal@4909 177 [ "$f" = "$tmp" ] && continue
pascal@4909 178 link="-"
pascal@4909 179 [ -L "$f" ] && link=$(readlink "$f")
pascal@4909 180 date=$(stat -c "%y" $f | $AWK_PROG \
pascal@4909 181 '{ printf "%s;%s\n",$1,substr($2,0,8)}')
pascal@4909 182 echo "${f#$tmp/};$(stat -c "%s;%A;%U;%G" $f);$date;$link"
pascal@4909 183 done;;
pascal@4909 184 -e) ( cd $tmp ; tar cf - "$@" ) | tar xf - ;;
pascal@4909 185 -a) tar cf - "$@" | ( cd $tmp ; tar xf - );;
pascal@4909 186 -r) ( cd $tmp ; rm -rf "$@" )
pascal@4909 187 esac
pascal@4909 188 $umnt $tmp
pascal@4909 189 rmdir $tmp
pascal@4909 190 exit
pascal@942 191 }
pascal@942 192
pascal@4909 193 update()
pascal@4909 194 {
pascal@4909 195 loop_fs "$@"
pascal@4909 196 [ "$COMPRESS" = "false" ] && return
pascal@4909 197 action=$1
pascal@4909 198 shift
pascal@4909 199 tardir="$(dirname "$archive")"
pascal@5209 200 if [ "$(readlink /bin/tar)" != "busybox" ] && [ "$action" != "-n" ] &&
pascal@5209 201 in_exts $TAR_EXTS $XZ_EXTS $LRZIP_EXTS ; then
pascal@5209 202 decompress_func
pascal@5209 203 case "$action" in
pascal@5209 204 -r) tar --delete -f "$archive" "$@";;
pascal@5209 205 -a) cd "$tardir"
pascal@5209 206 while [ -n "$1" ]; do
pascal@5209 207 tar -rf "$archive" "${1#$tardir/}"
pascal@5209 208 done
pascal@4909 209 esac
pascal@5209 210 compress_func
pascal@4909 211 fi
pascal@4909 212 while read add extract exts; do
pascal@5209 213 in_exts $exts || continue
pascal@5209 214 if [ "$action" = "-n" ]; then
pascal@5209 215 decompress_func
pascal@5209 216 cd "$tardir"
pascal@5209 217 $add "${1#$tardir/}" > "$archive"
pascal@5209 218 compress_func
pascal@5209 219 fi
pascal@5209 220 tmp="$(mktemp -d -t tartmp.XXXXXX)"
pascal@5209 221 cd $tmp
pascal@5209 222 $DECOMPRESS "$archive" | $extract
pascal@5209 223 status=$?
pascal@5209 224 if [ $status -eq 0 -a -n "$1" ]; then
pascal@5209 225 while [ "$1" ]; do
pascal@5209 226 ${action#-}_file "${1#$tardir/}" $here
pascal@5209 227 shift
pascal@5209 228 done
pascal@5209 229 $add $(ls -a | grep -v ^\.$ | grep -v ^\.\.$) | \
pascal@5209 230 $COMPRESS > "$archive"
pascal@4909 231 status=$?
pascal@5209 232 fi
pascal@5209 233 cd - >/dev/null
pascal@5209 234 rm -rf $tmp
pascal@5209 235 exit $status
pascal@4909 236 done <<EOT
pascal@4954 237 tar\ -cf\ - tar\ -xf\ - $TAR_EXTS $XZ_EXTS $LRZIP_EXTS
pascal@4954 238 addcpio cpio\ -id\ >\ /dev/null $CPIO_EXTS $CPIOXZ_EXTS $CPIOLRZIP_EXTS
pascal@4909 239 EOT
pascal@4909 240 }
pascal@4909 241
pascal@5167 242 AWK_MISC='
pascal@4909 243 BEGIN {
pascal@4909 244 attr="-"
pascal@4909 245 link="-"
pascal@4909 246 uid=uuid
pascal@4909 247 gid=uuid
pascal@4909 248 }
pascal@4909 249 function getlink(arg)
pascal@4909 250 {
pascal@4909 251 split(arg, x, " -> ")
pascal@4909 252 name=x[1]
pascal@4909 253 link=x[2]
pascal@4909 254 if (!link) link="-"
pascal@4909 255 }
pascal@688 256
pascal@4909 257 function getname(arg)
pascal@4909 258 {
pascal@4909 259 # works with filenames that start with a space (evil!)
pascal@4909 260 split($0,x, arg)
pascal@4909 261 getlink(x[2])
pascal@4909 262 }
pascal@4909 263
pascal@4909 264 function getid(arg)
pascal@4909 265 {
pascal@4909 266 if (uuid != "") return
pascal@4909 267 split(arg,x,"/")
pascal@4909 268 uid=x[1]
pascal@4909 269 gid=x[2]
pascal@4909 270 }
pascal@4909 271
pascal@4909 272 function getattr(arg)
pascal@4909 273 {
pascal@4909 274 attr=arg
pascal@4909 275 if (index(attr, "D") != 0) attr="drwxr-xr-x"
pascal@4909 276 else if (index(attr, ".") != 0 || attr !~ /^[rwx-]/) attr="-rw-r--r--"
pascal@4909 277 }
pascal@4909 278
pascal@4909 279 function display()
pascal@4909 280 {
pascal@4909 281 if (name != "") printf "%s;%s;%s;%s;%s;%s;%s;%s\n",name,size,attr,uid,gid,date,time,link
pascal@4909 282 }
pascal@4909 283
pascal@4909 284 function show(arg)
pascal@4909 285 {
pascal@4909 286 getid($2)
pascal@4909 287 getname(arg)
pascal@4909 288 if (uid != "blocks") display()
pascal@4909 289 }'
pascal@5167 290
pascal@5167 291 awk0()
pascal@5167 292 {
pascal@5167 293 $AWK_PROG "$AWK_MISC $1"
pascal@5167 294 }
pascal@5167 295
pascal@5167 296 awku()
pascal@5167 297 {
pascal@5167 298 $AWK_PROG -v uuid=$(id -u -n) "$AWK_MISC $1"
pascal@5167 299 }
pascal@5167 300
pascal@5167 301 # main: option switches
pascal@5167 302 case "$opt" in
pascal@5167 303 -i) # info: output supported extentions for progs that exist
pascal@5167 304 while read exe exts; do
pascal@5167 305 [ "$(which $exe)" -o -f /lib/modules/$(uname -r)/kernel/$exe.ko ] &&
pascal@5167 306 echo -n "$exts " | sed 's/ /;/g'
pascal@5167 307 done <<EOT
pascal@5167 308 tar $TAR_EXTS $IPK_EXTS
pascal@5167 309 cpio $CPIO_EXTS $TAZPKG_EXTS
pascal@5167 310 unzip $ZIP_EXTS
pascal@5167 311 dpkg-deb $DEB_EXTS
pascal@5167 312 rpm2cpio $RPM_EXTS
pascal@5167 313 mount $ISO_EXTS $FS_EXTS
pascal@5167 314 xz $XZ_EXTS $CPIOXZ_EXTS
pascal@5167 315 lrzip $LRZIP_EXTS $CPIOLRZIP_EXTS
pascal@5167 316 rar $RAR_EXTS
pascal@5167 317 unace ace
pascal@5167 318 arj $ARJ_EXTS
pascal@19373 319 nz $NZ_EXTS
pascal@17256 320 7zr $_7Z_EXTS $_7Z_EXTS_X
pascal@5167 321 lha $LHA_EXTS
pascal@5167 322 lzop $LZO_EXTS
pascal@5167 323 cabextract cab
pascal@5167 324 cromfs-driver $CROMFS_EXTS
pascal@5167 325 fs/squashfs/squashfs $SQUASHFS_EXTS
pascal@5167 326 drivers/block/cloop $CLOOP_EXTS
pascal@17380 327 zpaq $ZPAQ_EXTS
pascal@5167 328 EOT
pascal@5167 329 echo ""
pascal@5167 330 exit
pascal@5167 331 ;;
pascal@5167 332 -o) # open: mangle output for xarchive
pascal@4909 333 while read filter exts; do
pascal@688 334 # lrwxrwxrwx USR/GRP 0 2005-05-12 00:32:03 file -> /path/to/link
pascal@5209 335 in_exts $exts && $DECOMPRESS "$archive" | $filter | awk0 '
pascal@4909 336 {
pascal@4909 337 attr=$1
pascal@4909 338 size=$3
pascal@4909 339 date=$4
pascal@4909 340 time=$5
pascal@4909 341 show($5 " ")
pascal@4909 342 }'
pascal@4909 343 done <<EOT
pascal@4954 344 cpio\ -tv $CPIO_EXTS $CPIOXZ_EXTS $CPIOLRZIP_EXTS $RPM_EXTS $TAZPKG_EXTS
pascal@4954 345 tar\ -tvf\ - $TAR_EXTS $XZ_EXTS $LRZIP_EXTS $IPK_EXTS
pascal@4909 346 dpkg_c $DEB_EXTS
pascal@2877 347 EOT
pascal@4909 348 loop_fs $opt
pascal@5209 349 if in_exts $ZIP_EXTS; then
pascal@2877 350 if [ "$(which zipinfo)" ]; then
pascal@4909 351 # -rw-r--r-- 2.3 unx 11512 tx defN YYYYMMDD.HHMMSS file
pascal@5167 352 zipinfo -T -s-h-t "$archive" | awku '
pascal@4909 353 {
pascal@4909 354 attr=$1
pascal@4909 355 size=$4
pascal@4909 356 date=substr($7,1,4) "-" substr($7,5,2) "-" substr($7,7,2)
pascal@4909 357 time=substr($7,10,2) ":" substr($7,12,2) ":" substr($7,14,2)
pascal@4909 358 show($7 " ")
pascal@4909 359 }'
pascal@688 360 else
pascal@4909 361 # 6622 2005-04-22 12:29:14 file
pascal@5167 362 unzip -l "$archive" | awku '
pascal@4909 363 /-[0-9]+-/ {
pascal@4909 364 size=$1
pascal@4909 365 date=$2
pascal@4909 366 time=$3
pascal@4909 367 show($3 " ")
pascal@4909 368 }'
pascal@688 369 fi
pascal@5209 370 fi
pascal@4909 371 # -----------+---------------------+-------
pascal@4909 372 # 6622 | 22.04.2005 12:29:14 | file
pascal@5209 373 in_exts cab && cabextract -q -l "$archive" | awku '
pascal@4909 374 /[0-9]+ |/ {
pascal@4909 375 size=$1
pascal@4909 376 date=$3
pascal@4909 377 time=$4
pascal@4909 378 show($4 " | ")
pascal@4909 379 }'
pascal@2877 380 #-------------------------------------
pascal@2877 381 # bookmarks/mozilla_bookmarks.html
pascal@2877 382 # 11512 5231 45% 28-02-05 16:19 -rw-r--r-- F3F3477F m3b 2.9
pascal@2877 383 # (or 11512 5231 45% 28-02-05 16:19 .D.... 00000000 m3b 2.9)
pascal@5209 384 in_exts $RAR_EXTS && rar v -c- "$archive" | awku '
pascal@4909 385 /-[0-9]+-/ {
pascal@4909 386 getattr($6)
pascal@4909 387 size=$1
pascal@4909 388 date=$4
pascal@4909 389 time=$5
pascal@4909 390 display()
pascal@4909 391 }
pascal@4909 392 {
pascal@4909 393 name=substr($0,2)
pascal@4909 394 }'
pascal@4909 395 # Date ³Time ³Packed ³Size ³Ratio³File
pascal@4909 396 # 17.09.02³00:32³ 394116³ 414817³ 95%³ OggDS0993.exe
pascal@5209 397 in_exts ace && unace v -c- "$archive" | awku '
pascal@4909 398 /^[0-9][0-9]\./ {
pascal@4909 399 # strip the funky little 3 off the end of size
pascal@4909 400 size=substr($3,1,(length($3)-1))
pascal@4909 401 date=substr($1,1,8)
pascal@4909 402 time=substr($1,10,5)
pascal@4909 403 show($4 " ")
pascal@4909 404 }'
pascal@4909 405 # ------------------- ----- ------------ ------------ ------------
pascal@4909 406 # 1992-04-12 11:39:46 ....A 356 ANKETA.FRG
pascal@5209 407 in_exts 7z bcj bcj2 && 7zr l "$archive" | awku '
pascal@4909 408 /^[0-9]+-/ {
pascal@4909 409 date=$1
pascal@4909 410 time=$2
pascal@4909 411 getattr($3)
pascal@4909 412 size=$4
pascal@4909 413 $0=substr($0, 54)
pascal@4909 414 name=$1
pascal@4909 415 if (NF > 1) name=$0
pascal@4909 416 gsub(/\\/, "/", name)
pascal@4909 417 display()
pascal@4909 418 }'
pascal@4909 419 # 001) ANKETA.FRG
pascal@4909 420 # 3 MS-DOS 356 121 0.340 92-04-12 11:39:46 1
pascal@5209 421 in_exts $ARJ_EXTS && arj v "$archive" | awku '
pascal@4909 422 BEGIN { name="" }
pascal@4909 423 /^[0-9]+\) / {
pascal@4909 424 display()
pascal@4909 425 getname($1 " ")
pascal@4909 426 }
pascal@4909 427 /^[\t ]+[0-9]+/ {
pascal@4909 428 size=$3
pascal@4909 429 date=$6
pascal@4909 430 time=$7
pascal@4909 431 getattr($8)
pascal@4909 432 }
pascal@4909 433 /^[\t ]+Owner: UID [0-9]+\, GID [0-9]+/ { uid=$3; gid=$5 }
pascal@4909 434 /^[\t ]+SymLink -> / { link=$3; attr="l"substr(attr, 2) }
pascal@4909 435 /^---/ { display() }
pascal@4909 436 '
pascal@19373 437 # Archive: nz.nz
pascal@19373 438 # checksum perm yyyy-mmm-dd hh:mm:ss size file
pascal@19373 439 # 387b9923 0755 2016-Aug-10 13:29:41 1144 KB nz
pascal@19373 440 # a52758fb 0644 2016-Aug-10 13:29:41 371 B readme.txt
pascal@19373 441 # Total of 3 files, 1 181 184 bytes.
pascal@19373 442 in_exts $NZ_EXTS && nz l "$archive" | awku '
pascal@19373 443 {
pascal@19373 444 if ($1 == "checksum") show=1
pascal@19373 445 else if ($1 == "Total") exit
pascal@19373 446 else {
pascal@19373 447 attr=$2
pascal@19373 448 date=$3
pascal@19373 449 time=$4
pascal@19373 450 size=$5 $6
pascal@19373 451 name=$7
pascal@19373 452 display()
pascal@19373 453 }
pascal@19373 454 }
pascal@19373 455 '
pascal@17380 456 # Ver Date Time (UT) Attr Size Ratio File
pascal@17380 457 # ----- ---------- -------- ------ ------------ ------ ----
pascal@17380 458 # > 1 2012-04-10 11:47:56 100644 576 0.2611 /etc/skel/.profile
pascal@17380 459 in_exts $ZPAQ_EXTS && zpaq l "$archive" | awku '
pascal@17380 460 /^>/ {
pascal@17380 461 date=$3
pascal@17380 462 time=$4
pascal@17380 463 attr=$5
pascal@17380 464 size=$6
pascal@17380 465 name=$8
pascal@17380 466 display()
pascal@17380 467 }'
pascal@4909 468 # Desktop/up -> ..
pascal@4909 469 # lrwxrwxrwx 0/0 0 0 ****** -lhd- 0000 2009-05-03 16:59:03 [2]
pascal@5209 470 in_exts $LHA_EXTS && lha v -q -v "$archive" | awk0 '
pascal@4909 471 {
pascal@4909 472 if ($4 == "") { getlink($0); next }
pascal@4909 473 attr=$1
pascal@4909 474 getid($2)
pascal@4909 475 size=$4
pascal@4909 476 date=$8
pascal@4909 477 time=$9
pascal@4909 478 display()
pascal@4909 479 }'
pascal@3194 480 # ------ ------ ------ ----- ---- ---- ----
pascal@3194 481 # LZO1X-1 10057 5675 56.4% 2005-07-25 16:26 path/file
pascal@5209 482 in_exts $LZO_EXTS && lzop -Plv "$archive" | awku '
pascal@4909 483 /-[0-9]+-/ {
pascal@4909 484 size=$2
pascal@4909 485 date=$5
pascal@4909 486 time=$6
pascal@4909 487 show($6 " ")
pascal@4909 488 }'
pascal@4909 489 exit 0
pascal@4909 490 ;;
pascal@4909 491 -a|-n) # add to archive / new: create new archive
pascal@4909 492 update $opt "$@"
pascal@2877 493 while read exe args exts; do
pascal@5209 494 in_exts $exts && [ "$(which $exe)" ] || continue
pascal@4909 495 [ "$opt$exe" = "-nzip" ] && args="-r"
pascal@5209 496 # only add the file's basename, not the full path
pascal@5209 497 while [ "$1" ]; do
pascal@5209 498 cd "$(dirname "$1")"
pascal@5209 499 $exe $args "$archive" "$(basename "$1")"
pascal@5209 500 status=$?
pascal@5209 501 shift
pascal@5209 502 done
pascal@5209 503 exit $status
pascal@2877 504 done <<EOT
pascal@2877 505 zip -g\ -r $ZIP_EXTS
pascal@2877 506 rar a $RAR_EXTS
pascal@4909 507 arj a $ARJ_EXTS
pascal@19373 508 nz a $NZ_EXTS
pascal@4909 509 7zr a\ -ms=off $_7Z_EXTS
pascal@2877 510 lha a $LHA_EXTS
pascal@17380 511 zpaq a $ZPAQ_EXTS
pascal@2877 512 EOT
pascal@4909 513 ;;
pascal@4909 514 -r) # remove from archive passed files
pascal@4909 515 update $opt "$@"
pascal@2877 516 while read exe args exts; do
pascal@5209 517 in_exts $exts && [ "$(which $exe)" ] || continue
pascal@5209 518 $exe $args "$archive" "$@" | grep -q E_NOTIMPL && {
pascal@5209 519 echo -e "7z cannot delete files from solid archive." >&2
pascal@5209 520 exit $UNSUPPORTED
pascal@5209 521 }
pascal@5209 522 exit 0
pascal@2877 523 done <<EOT
pascal@2877 524 zip -d $ZIP_EXTS
pascal@2877 525 rar d $RAR_EXTS
pascal@4909 526 arj d $ARJ_EXTS
pascal@2877 527 lha d $LHA_EXTS
pascal@4909 528 7zr d $_7Z_EXTS
pascal@17380 529 zpaq d $ZPAQ_EXTS
pascal@2877 530 EOT
pascal@4909 531 ;;
pascal@4909 532 -e) # extract from archive passed files
pascal@4909 533 while read arch exts; do
pascal@5209 534 in_exts $exts || continue
pascal@5209 535 $DECOMPRESS "$archive" | $arch "$@"
pascal@5209 536 exit $?
pascal@2877 537 done <<EOT
pascal@4954 538 tar\ -xf\ - $TAR_EXTS $IPK_EXTS $XZ_EXTS $LRZIP_EXTS
pascal@4954 539 cpio\ -idm $CPIO_EXTS $CPIOXZ_EXTS $CPIOLRZIP_EXTS $RPM_EXTS $TAZPKG_EXTS
pascal@2877 540 EOT
pascal@4909 541 while read exe x p exts; do
pascal@5209 542 in_exts $exts && [ "$(which $exe)" ] || continue
pascal@5209 543 [ "$x" != "N/A" ] && $exe $x "$archive" "$@"
pascal@5209 544 status=$?
pascal@5209 545 if [ "$p" != "N/A" -a $status -ne 0 ]; then
pascal@5209 546 echo Password protected, opening an x-term...
pascal@5209 547 $XTERM_PROG -e $exe $p "$archive" "$@"
pascal@5209 548 exit $?
pascal@5209 549 fi
pascal@5209 550 exit $status
pascal@2877 551 done <<EOT
pascal@4909 552 unzip -n N/A $ZIP_EXTS
pascal@4909 553 dpkg-deb -X N/A $DEB_EXTS
pascal@4909 554 lha x N/A $LHA_EXTS
pascal@4909 555 lzop -x N/A $LZO_EXTS
pascal@4909 556 rar x\ -o-\ -p- x\ -o- $RAR_EXTS
pascal@4909 557 arj x\ -y x\ -y\ -g? $ARJ_EXTS
pascal@19373 558 nz x N/A $NZ_EXTS
pascal@17256 559 7zr x\ -y\ -p- x\ -y $_7Z_EXTS $_7Z_EXTS_X
pascal@4909 560 unace N/A x\ -o\ -y ace
pascal@4909 561 cabextract -q N/A cab
pascal@17380 562 zpaq x x\ -key $ZPAQ_EXTS
pascal@2877 563 EOT
pascal@4909 564 loop_fs $opt "$@"
pascal@4909 565 ;;
pascal@4909 566 *) cat <<EOT
pascal@4909 567 error, option $opt not supported
pascal@4909 568 use one of these:
pascal@4909 569 -i #info
pascal@4909 570 -o archive #open
pascal@4909 571 -a archive files #add
pascal@4909 572 -n archive file #new
pascal@4909 573 -r archive files #remove
pascal@4909 574 -e archive files #extract
pascal@2877 575 EOT
pascal@688 576 esac
pascal@4909 577 exit $UNSUPPORTED