shell脚本问题 我想递归复制目录(不复制文件)同时复制一些类型的文件(通过后缀名来确定),但有错误

shell脚本问题 我想递归复制目录(不复制文件)同时复制一些类型的文件(通过后缀名来确定),但是写了好久还是错误了错误:./cpch2.sh: 第 28 行: [: 参数太多./cpch2.sh: 第 28 行: [: Sprague-Grundy: 期待二元表达式./cpch2.sh: 第 28 行: [: Sprague-Grundy: 期待二元表达式请问如何解决?到底那里有错看了一下执行的效果,貌似复制目录树成功了,但是复制一些类型的文件失败了。help,让我这个渣学习学习
http://hi.baidu.com/yilahanbao/item/87ce6f283536b450479962de
sorry,我忘记了给脚本,这是脚本地址(我发到空间去了)

第1个回答  2014-05-04

你的脚本没什么问题啊,我试验了一下(稍微修改了一下,方便使用),符合的文件都拷贝了,不符合的都没有。 怀疑要么是你的bash本身版本不对, 要么是 [ 命令出问题了,应该是你系统的问题,代码本身应该是没错的。建议把 bash 版本、系统信息都查一下,另外,尝试把你代码中用 if [ condition ]; 的地方改成 if [[ condition ]]; 再试试,还有就是看看目录名以及没有被复制的文件名里,是否包含有奇怪的字符,或者是空格等。


#!/bin/bash
function cmpnol()
{
    x=$(echo $1 | tr [A-Z] [a-z])
    y=$(echo $2 | tr [A-Z] [a-z])
    if [ "$x" = "$y" ]; then
        return 0;
    else
        return 1;
    fi
}
function istype()
{
    if cmpnol ${1##*.} $2; then
        return 0;
    else
        return 1;
    fi
}
 
function cpdir()
{
    mkdir $1
    for i in *
    do
        if [ "$i" = "." ] || [ "$i" = ".." ]; then
            continue;
        elif [ -d $i ]; then
            pathb_tmp=$1"/"$i
            cd $i
            cpdir $pathb_tmp
            cd ..
        elif istype $i doc || istype $i ppt; then
            echo "cp $i"
            cp $i $1
        elif istype $i pas || istype $i cpp || istype $i c; then
            echo "cp $i"
            cp $i $1
        fi
    done
}
from=$1
to=$2
echo "from $from to $to"
cd $from
cpdir $to

本回答被提问者采纳
第2个回答  2014-05-03
可以 把程序发一下不追答

我试了一下你的脚本, 我这里没有问题, 目录和文件都可以. 也没有错误.

不知你用的是什么shell , 我的是 bash.

另外, 你的路径中 如果出现空格的话, 路径一定要用 "$i" (双引号) 括着. 我怀疑就是这个问题...

还有就是, 一开始练习shell的时候, 路径中还是不要出现 中文吧.

相关了解……

你可能感兴趣的内容

大家正在搜

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网