从一个目录递归复制到另一个目录

时间:2014-04-05 15:22:34

标签: shell recursion

我有三个变量:

   taille:迭代次数
   racine:从哪里复制的目录
   rep:目录复制<> br

因此代码应该从racine到rep递归复制,复制的文件数量受尾部限制。我似乎无法使cp命令工作,我不知道如何使递归工作。我的代码如下

if [ -z "$1" ]
then
    taille=0
else
    taille=$1
fi

if [ -z "$2" ]
then
    racine=`pwd`
else
    racine=$2
fi
if [ -z "$3" ]
then
    rep="test2"
else
    rep=$3
fi

    count=0
    for i in `ls $racine`;
    do
        if [ $count -lt $((taille+1)) ]
        then
            echo $i
            `cp $i test2`
        fi  
    count=$((count+1))
    done

有人能帮助我吗?

2 个答案:

答案 0 :(得分:0)

有几件事:

您不需要复制命令周围的后退标记,因此只需cp $i test2

您可以增加这样的变量:count=`expr $count + 1`

编辑:如果您使用Bash,则count=$((count+1))语法有效。

答案 1 :(得分:0)

以下快速和脏的测试脚本似乎可以做你想要的(或多或少)。

我试图传达一般方法,而不是提供完整的解决方案。给出源目录的相对路径(例如../../),下面的内容将会出错(查看mkdir -p行),因此您可能需要考虑一下这个问题。我希望它能够清楚地传达这个想法。

#!/bin/bash

racine="$1"
rep="$2"

declare -i taille=3
declare -i count=0

while read -r -d $'\0'; do
    if [ $count -ge $taille ]; then
        break
    fi

    if [ -d "$REPLY" ]; then
        mkdir -p "$rep/$REPLY";
    else
        cp "$REPLY" "$rep"
    fi

    count=$((count+1))
done < <(find $racine -print0)