当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-12 12:40 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
代码:
#!/bin/sh

filename="$@"
bname=$(basename "$filename")
dname=$(dirname "$filename")
destdir=${bname}.FILES

[ -w "$dname" ]  || dname=${HOME}

if [ ! -d "$destdir" ]; then
    cd "$dname"
    mkdir "$destdir"
    cd "$destdir"

    case "$bname" in
        *.rar ) rar e "$filename" ;;
        *.tar.gz | *.tgz) tar -xvzf "$filename" ;;
        *.tar.bz2 ) tar -xvjf "$filename" ;;
        *.tar ) tar -xvf "$filename" ;;
        *.gz ) gzip -d "$filename" ;;
        *.bz2 | *.bzip2 ) bzip2 -d "$filename" ;;
        *.zip ) unzip "$filename" ;;
        *.deb) ar x "$filename" ;;
        * ) ;;
    esac
fi


解压后会带上原来的扩展名..1.tar.gz解压到了1.tar.gz.FILES,能不能解压到1...

理论上destdir=${bname}.FILES改成用sed正则匹配去掉扩展名,但是,我没鼓捣出来


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-12 12:48 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
☎ cat 解压到这里
#!/bin/bash

#file-roller -h $*
file-roller --extract-to="""$*.FILES""" --force """$*"""


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-12 14:01 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
代码:
lily@LLY:~$ t=a.b.c.d
lily@LLY:~$ echo $t
a.b.c.d
lily@LLY:~$ echo ${t%.*}.FILES
a.b.c.FILES
lily@LLY:~$ echo ${t%%.*}.FILES
a.FILES


_________________
关注我的blog: ε==3


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-12 22:16 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
bones7456 写道:
代码:
lily@LLY:~$ t=a.b.c.d
lily@LLY:~$ echo $t
a.b.c.d
lily@LLY:~$ echo ${t%.*}.FILES
a.b.c.FILES
lily@LLY:~$ echo ${t%%.*}.FILES
a.FILES


太棒了...


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-12 22:39 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
代码:
#!/bin/sh

filename="$@"
bname=$(basename "$filename")
dname=$(dirname "$filename")
destdir=${bname%.*}
case "$bname" in
        *.tar.gz | *.tar.bz2 ) destdir=${bname%%.*} ;;
esac

[ -w "$dname" ]  || dname=${HOME}

if [ ! -d "$destdir" ]; then
    cd "$dname"
    mkdir "$destdir"
    cd "$destdir"

    case "$bname" in
        *.rar ) rar e "$filename" ;;
        *.tar.gz | *.tgz) tar -xvzf "$filename" ;;
        *.tar.bz2 ) tar -xvjf "$filename" ;;
        *.tar ) tar -xvf "$filename" ;;
        *.gz ) gzip -d "$filename" ;;
        *.bz2 | *.bzip2 ) bzip2 -d "$filename" ;;
        *.zip ) unzip "$filename" ;;
        *.deb) ar x "$filename" ;;
        * ) ;;
    esac
fi


完美啊 不用多装个file-roller了...


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-12 22:48 
头像

注册: 2007-11-19 21:51
帖子: 6956
地址: 成都
送出感谢: 0 次
接收感谢: 4
文件名里面有点就腰斩掉了 :em04


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-12 22:57 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
xiooli 写道:
文件名里面有点就腰斩掉了 :em04


所以我又加了个case

tar.gz这样的去掉两个,rar这样的去掉一个,我试过了,完美啊....


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-28 23:25 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
xiooli 写道:
文件名里面有点就腰斩掉了 :em04

今天才发现bug...多搞个变量,多去一遍好了

代码:
#!/bin/sh

filename="$@"
bname=$(basename "$filename")
dname=$(dirname "$filename")
destdir1=${bname%.*}
destdir=${destdir1}

case "$bname" in
   *.tar.gz | *.tar.bz2 ) destdir=${destdir1%.*} ;;
esac

[ -w "$dname" ]  || dname=${HOME}

if [ ! -d "$destdir" ]; then
    cd "$dname"
    mkdir "$destdir"
    cd "$destdir"

    case "$bname" in
        *.tar.gz | *.tgz) tar xvzf "$filename" ;;
        *.tar.bz2 ) tar xvjf "$filename" ;;
        *.tar ) tar xvf "$filename" ;;
        *.gz ) gzip -d "$filename" ;;
        *.bz2 | *.bzip2 ) bzip2 -d "$filename" ;;
   *.deb) ar x "$filename" ;;
        *.zip ) unzip "$filename" ;;
        *.rar ) unrar e "$filename" ;;
   *.7z) 7zr e "$filename" ;;
        * ) ;;
    esac
fi

这次感觉应该没问题了


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-29 22:02 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
仍然有问题:
1. 一开始 filename="$@" 就有问题,如果用多个文件名调用脚本呢?
2. if [ ! -d "$destdir" ]; then 的逻辑有些怪,没有 else 语句,也就是说如果当前目录下存在一个叫 "$destdir" 的子目录,就什么也不做。
3. cd 之后再执行 tar 等命令,而后面的文件名参数没有转换路径,那么当要解压的文件不在当前目录下时,用相对路径来调用脚本时就会找不到文件了。


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-29 22:48 

注册: 2007-05-06 10:12
帖子: 1994
送出感谢: 0 次
接收感谢: 0 次
aerofox 写道:
仍然有问题:
1. 一开始 filename="$@" 就有问题,如果用多个文件名调用脚本呢?
2. if [ ! -d "$destdir" ]; then 的逻辑有些怪,没有 else 语句,也就是说如果当前目录下存在一个叫 "$destdir" 的子目录,就什么也不做。
3. cd 之后再执行 tar 等命令,而后面的文件名参数没有转换路径,那么当要解压的文件不在当前目录下时,用相对路径来调用脚本时就会找不到文件了。


因为是rox用的,1和3不存在,shell用的嘛,alias的解压就挺好...

要是能够实现,如果压缩包里只有一个文件夹就不要新建文件夹直接解压就好了


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2008-12-29 23:07 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
我没用过 rox,不知道它会不会带多个文件调用脚本,LZ 确认它不会就好了。不过这样的话,我还是建议把 "$@" 改为 "$1",虽然效果是一样的,但含义更明确。
第 2 个问题你再好好想想,改改就行了。
楼上提出的新问题,可以先列一下内容(比如 tar tvf "$filename"),并且看看是不是都以一个目录名开头(要考虑由 tar cvf file.tar . 生成的包中的例外情况)。这样做就是有点耗费时间。另一个做法是,先不管三七二十一,按你原来的思路,都解开到独立的目录下,然后再看这个目录下如果只存在一个子目录,不含其它文件和目录项,就把它移到上一级目录中,并把原来创建的子目录删除。


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2010-02-04 20:46 
头像

注册: 2009-03-05 16:31
帖子: 2794
送出感谢: 0 次
接收感谢: 11
当年年少无知啊...areofox针针见血...

又写了个新版本, 同时支持rox和shell, 主要是万一有密码就要用到xterm, rox的脚本当前目录为~....请大家指正....

代码:
#!/bin/sh

case "$TERM" in
   xterm* | screen  ) head="" ;;
   * ) head="xterm -e" ;;
esac

for args in $@

do

fname=$(readlink -f "$args")
bname=$(basename "$fname")
dname=$(dirname "$fname")
dest1st=${bname%.*}
dest2nd=${dest1st%.*}
destdir=${dest1st}

case "$bname" in
   *.tar.gz | *.tar.bz2 ) destdir=${dest2nd} ;;
esac

if [ ! -w "$dname" ]; then

    $head "echo Permission denied && sleep 2"
    exit 1

elif [ -d "$dname/$destdir" ]; then

    $head "echo Directory already exists && sleep 2"
    exit 1

else

    cd "$dname"
    mkdir "$destdir"
    cd "$destdir"

    case "$bname" in
        *.tar.bz2 | *.tbz | *.tb2 | *.tbz2) $head tar xvjf "$fname" ;;
        *.tar.gz | *.tgz) $head tar xvzf "$fname" ;;
        * ) $head 7z x "$fname" ;;
    esac

fi

    cd "$dname"

done

exit 0


_________________
http://adam8157.info/


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2010-02-04 21:03 
头像

注册: 2008-04-26 12:41
帖子: 10971
送出感谢: 11
接收感谢: 38
:em09


_________________
[新手必读]wubi安装常见问题(FAQ)
[分享]装双系统的同学必看——Windows与Linux系统共享交换分区的方法
kde下唯美的暗黑内透主题(无需编译)
无穷老机上的Trinity Desktop Environment


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2010-02-05 1:44 

注册: 2008-05-03 23:42
帖子: 3681
送出感谢: 4
接收感谢: 6
物是人非啦
当年的 rms


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 帮忙改一下rox的解压缩脚本
帖子发表于 : 2010-02-16 19:21 

注册: 2008-10-31 22:12
帖子: 6546
系统: 践兔
送出感谢: 18
接收感谢: 25
xeoc 写道:
xiooli 写道:
文件名里面有点就腰斩掉了 :em04

今天才发现bug...多搞个变量,多去一遍好了

代码:
#!/bin/sh

filename="$@"
bname=$(basename "$filename")
dname=$(dirname "$filename")
destdir1=${bname%.*}
destdir=${destdir1}

case "$bname" in
   *.tar.gz | *.tar.bz2 ) destdir=${destdir1%.*} ;;
esac

[ -w "$dname" ]  || dname=${HOME}

if [ ! -d "$destdir" ]; then
    cd "$dname"
    mkdir "$destdir"
    cd "$destdir"

    case "$bname" in
        *.tar.gz | *.tgz) tar xvzf "$filename" ;;
        *.tar.bz2 ) tar xvjf "$filename" ;;
        *.tar ) tar xvf "$filename" ;;
        *.gz ) gzip -d "$filename" ;;
        *.bz2 | *.bzip2 ) bzip2 -d "$filename" ;;
   *.deb) ar x "$filename" ;;
        *.zip ) unzip "$filename" ;;
        *.rar ) unrar e "$filename" ;;
   *.7z) 7zr e "$filename" ;;
        * ) ;;
    esac
fi

这次感觉应该没问题了

大便包有自己的解压程式,dpkg-deb -x

引用:
当年年少无知啊...areofox针针见血...

又写了个新版本, 同时支持rox和shell, 主要是万一有密码就要用到xterm, rox的脚本当前目录为~....请大家指正....

代码:
#!/bin/sh

case "$TERM" in
   xterm* | screen  ) head="" ;;
   * ) head="xterm -e" ;;
esac

for args in $@

do

fname=$(readlink -f "$args")
bname=$(basename "$fname")
dname=$(dirname "$fname")
dest1st=${bname%.*}
dest2nd=${dest1st%.*}
destdir=${dest1st}

case "$bname" in
   *.tar.gz | *.tar.bz2 ) destdir=${dest2nd} ;;
esac

if [ ! -w "$dname" ]; then

    $head "echo Permission denied && sleep 2"
    exit 1

elif [ -d "$dname/$destdir" ]; then

    $head "echo Directory already exists && sleep 2"
    exit 1

else

    cd "$dname"
    mkdir "$destdir"
    cd "$destdir"

    case "$bname" in
        *.tar.bz2 | *.tbz | *.tb2 | *.tbz2) $head tar xvjf "$fname" ;;
        *.tar.gz | *.tgz) $head tar xvzf "$fname" ;;
        * ) $head 7z x "$fname" ;;
    esac

fi

    cd "$dname"

done

exit 0


第一个case里头(line 4)设了head=""
然而,后面(line 25, line 30)采用了 $head "口口"方式调用
就是执行"口口",然而:
代码:
>> bash -c 'foo="" ; $foo "echo foo ; sleep 1"'
bash: echo foo ; sleep 1:找不到命令
[tlcr: 127]

最好改成head='eval'

line 8,$@ 最好加双引号


_________________
代码:
] ls -ld //


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 18 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 3 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译