mc in main
This commit is contained in:
@@ -0,0 +1,157 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# u7z - 7zip file archive Virtual File System for Midnight Commander ( ftp://ftp.ibiblio.org/pub/Linux/utils/file/managers/mc/ )
|
||||
#
|
||||
# Copyright (C) 2004 Sergiy Niskorodov (sgh at ukrpost dot net)
|
||||
|
||||
# Written by Sergiy Niskorodov aka SGh
|
||||
#
|
||||
# beta version 4.16 (11 Apr 2005)
|
||||
#
|
||||
# 7z for linux can be found on http://sourceforge.net/projects/p7zip/
|
||||
|
||||
|
||||
# Thanks to urar VFS authors andrey joukov 2:5020/337.13@fidonet.org,
|
||||
# christian.gennerat@alcatel.fr, Andrew V. Samoilov <sav@bcs.zp.ua>
|
||||
# I use this script like example
|
||||
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
|
||||
SEVENZ=`which 7za`
|
||||
|
||||
|
||||
mc7zfs_list ()
|
||||
{
|
||||
$SEVENZ l "$1" 2> /dev/null | gawk -v uid=${UID-0} '
|
||||
BEGIN { flag=0; arr_of_month="JanFebMarAprMayJunJulAugSepOctNovDec" }
|
||||
/^-------/ { flag++; if (flag > 1) exit 0; next }
|
||||
{
|
||||
if (flag == 0) next
|
||||
|
||||
year=substr($1, 1, 4)
|
||||
month=substr($1, 6, 2)
|
||||
day=substr($1, 9, 2)
|
||||
|
||||
month_name=substr(arr_of_month, (month-1)*3+1, 3)
|
||||
|
||||
time=substr($2, 1, 5)
|
||||
|
||||
if (index($3, "D") != 0)
|
||||
attr="drwxr-xr-x"
|
||||
else
|
||||
if (index($3, ".") != 0)
|
||||
attr="-rw-r--r--"
|
||||
|
||||
size=$4
|
||||
|
||||
$0=substr($0, 54)
|
||||
if (NF > 1)
|
||||
name=$0
|
||||
else
|
||||
name=$1
|
||||
|
||||
gsub(/\\/, "/", name)
|
||||
|
||||
printf "%s 1 %-8d %-8d %8d %3s %2d %4d %s %s\n", attr, uid, 0, size, month_name, day, year, time, name
|
||||
}'
|
||||
}
|
||||
|
||||
mc7zfs_copyin ()
|
||||
{
|
||||
# preserve pwd.
|
||||
pwd=`pwd`
|
||||
# Create a directory and copy in it the tmp file with the random name
|
||||
dir="$3".dir
|
||||
mkdir "$dir"
|
||||
cd "$dir"
|
||||
mv "$1" .
|
||||
arname=`basename "$1"`
|
||||
di="${2%/*}"
|
||||
# if file is to be written upper in the archive tree, make fake dir
|
||||
if test "$di" != "${2##*/}" ; then
|
||||
# echo asdsad 1>&2
|
||||
mkdir -p "$di"
|
||||
fi
|
||||
# pwd > /tmp/cdir
|
||||
# echo "$arname $2" > /tmp/ters
|
||||
cp -fp "$3" "$dir/$2"
|
||||
# cp -f "$1" "$3.dir"
|
||||
$SEVENZ a "$arname" "$2" -w >/dev/null 2> /dev/null
|
||||
mv "$arname" "$1"
|
||||
cd $pwd
|
||||
rm -rf "$3.dir"
|
||||
}
|
||||
|
||||
mc7zfs_copyout ()
|
||||
{
|
||||
dir=tmpdir.${RANDOM}
|
||||
mkdir /tmp/"$dir"
|
||||
# echo "$1 $2 $3" > hers
|
||||
# p7zip 0.91 don't understand filename in subdir without "./"
|
||||
# but in top dir it understand only without "./"
|
||||
FLIST=`$SEVENZ l "$1" 2> /dev/null`
|
||||
echo "$FLIST" | grep -q "[.][/]" &> /dev/null && EXFNAME=*./"$2" || EXFNAME="$2"
|
||||
EXFN=`basename "$2"`
|
||||
$SEVENZ e -r- "$1" "$EXFNAME" -o/tmp/"$dir" > /dev/null 2> /dev/null
|
||||
|
||||
cat /tmp/"$dir"/"$EXFN" > "$3"
|
||||
rm -rf /tmp/"$dir"
|
||||
}
|
||||
|
||||
mc7zfs_mkdir ()
|
||||
{
|
||||
# Function not fully implemented, because 7z cannot keep empty directories
|
||||
# preserve pwd.
|
||||
pwd=`pwd`
|
||||
# Create a directory and create in it a tmp directory with the good name
|
||||
dir=tmpdir.${RANDOM}
|
||||
mkdir $dir
|
||||
cd $dir
|
||||
mv "$1" .
|
||||
arname=`basename "$1"`
|
||||
mkdir -p "$2"
|
||||
# 7z cannot create an empty directory
|
||||
# touch "$2"/.emptydir
|
||||
$SEVENZ a -r "$arname" "$2" >/dev/null 2>/dev/null
|
||||
# echo "$1" "$2" >error34
|
||||
# $SEVENZ d ../"$1" "$2/.7zfs" >/dev/null
|
||||
mv "$arname" "$1"
|
||||
cd $pwd
|
||||
rm -rf $dir
|
||||
}
|
||||
|
||||
mc7zfs_rm ()
|
||||
{
|
||||
$SEVENZ l "$1" 2> /dev/null | grep -q "[.][/]" &> /dev/null && EXFNAME=*./"$2" || EXFNAME="$2"
|
||||
$SEVENZ d "$1" "$EXFNAME" 2>&1 | grep -q E_NOTIMPL &> /dev/null && { echo -e "Function not implemented...\n7z cannot delete files from solid archive." >&2 ; exit 1 ; }
|
||||
}
|
||||
|
||||
umask 077
|
||||
|
||||
cmd="$1"
|
||||
shift
|
||||
|
||||
case "$cmd" in
|
||||
list) mc7zfs_list "$@" ;;
|
||||
rm) mc7zfs_rm "$@" ;;
|
||||
rmdir) mc7zfs_rm "$@" ;;
|
||||
mkdir) mc7zfs_mkdir "$@" ;;
|
||||
copyin) mc7zfs_copyin "$@" ;;
|
||||
copyout) mc7zfs_copyout "$@" ;;
|
||||
*) exit 1 ;;
|
||||
esac
|
||||
exit 0
|
||||
Reference in New Issue
Block a user