shell脚本问题 我想递归复制目录(不复制文件)同时复制一些类型的文件(通过后缀名来确定),但是写了好久还是错误了错误:./cpch2.sh: 第 28 行: [: 参数太多./cpch2.sh: 第 28 行: [: Sprague-Grundy: 期待二元表达式./cpch2.sh: 第 28 行: [: Sprague-Grundy: 期待二元表达式请问如何解决?到底那里有错看了一下执行的效果,貌似复制目录树成功了,但是复制一些类型的文件失败了。help,让我这个渣学习学习
http://hi.baidu.com/yilahanbao/item/87ce6f283536b450479962de
sorry,我忘记了给脚本,这是脚本地址(我发到空间去了)
你的脚本没什么问题啊,我试验了一下(稍微修改了一下,方便使用),符合的文件都拷贝了,不符合的都没有。 怀疑要么是你的bash本身版本不对, 要么是 [ 命令出问题了,应该是你系统的问题,代码本身应该是没错的。建议把 bash 版本、系统信息都查一下,另外,尝试把你代码中用 if [ condition ]; 的地方改成 if [[ condition ]]; 再试试,还有就是看看目录名以及没有被复制的文件名里,是否包含有奇怪的字符,或者是空格等。
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本回答被提问者采纳
我试了一下你的脚本, 我这里没有问题, 目录和文件都可以. 也没有错误.
不知你用的是什么shell , 我的是 bash.
另外, 你的路径中 如果出现空格的话, 路径一定要用 "$i" (双引号) 括着. 我怀疑就是这个问题...
还有就是, 一开始练习shell的时候, 路径中还是不要出现 中文吧.