Bash:重新创建递归子目录

时间:2016-06-22 06:44:23

标签: bash recursion directory

我在很多子目录中都有很多文件。

我想对它们执行一些任务并将结果返回到一个新文件中,但是在一个输出目录中,它与输入具有完全相同的子目录。

我已经尝试了这个:

#!/bin/bash

########################################################

# $1 = "../benchmarks/k"
# $2 = Output Folder;
# $3 = Path to access the solver

InputFolder=$1;
OutputFolder=$2;

Solver=$3

mkdir -p $2;

########################################
#
# Send the command on the cluster 
# to run the solver on the instancee.
#
########################################
solveInstance() {

    instance=$1;

#   $3 $instance > $2/$i.out 
}

########################################
#
# Loop on benchmarks folders recursively
#
########################################
loop_folder_recurse() {

    for i in "$1"/*;
    do
        if [ -d "$i" ]; then

            echo "dir: $i"

            mkdir -p "$2/$i";

            loop_folder_recurse "$i"

        elif  [ -f "$i" ]; then

            solveInstance "$i"

        fi

    done
}

########################################
#
# Main of the Bash script.
#
########################################

echo "Dir: $1";

loop_folder_recurse $1

########################################################

问题在于我的行mkdir -p "$2/$i";$2是我们在开头创建的目录的名称,因此没有问题。但是在$i中,它可以是绝对路径,在这种情况下,它想要创建所有子目录以到达文件:不可能。或者它可以包含..并出现同样的问题......

我不确切知道如何修复这个错误:/我尝试使用sed但我没有成功:/

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用查找

for i in `find $1 -type d` # Finds all the subfolders and loop.
do
    mkdir ${i/$1/$2} # Replaces the root with the new root and creates the dir.
done

以这种方式,您可以在$ 2中重新创建$ 1的文件夹结构。如果您使用 sed 将旧文件夹路径替换为新文件夹,则甚至可以避免循环。