我在很多子目录中都有很多文件。
我想对它们执行一些任务并将结果返回到一个新文件中,但是在一个输出目录中,它与输入具有完全相同的子目录。
我已经尝试了这个:
#!/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
但我没有成功:/
答案 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 将旧文件夹路径替换为新文件夹,则甚至可以避免循环。