多次运行脚本并将输出保存在多个文件夹中

时间:2018-08-30 00:48:45

标签: linux bash shell for-loop

我试图在多个文件夹中运行script,这些文件夹调用:一个软件,两个输入文件,它们自动创建一个文件夹作为输出(在输入的文件夹中),例如:

./soft -in1 input1 -in2 input2

此外,我有多个文件夹,如下所示:

├── Folder1
│   ├── input1.in1
│   ├── input1.in2
│   ├── soft.py
├── Folder2
│   ├── input2.in1
│   ├── input2.in2
│   ├── soft.py                                                                             
├── script.sh

所以,我想做两个过程:

第一,递归运行脚本(在所有文件夹中),第二,在每个文件夹中运行脚本的“ X”重复。我让该脚本递归运行。

但是我在尝试重复时遇到问题。我尝试使用seq命令,但是软件./soft在每次重复中都重写输出。因此,我需要将输出与每个重复的编号保存在文件夹中(例如\ out_Folder1_rep1; \ out_Folder1_rep2; \ out_Folder1_rep3)。

我需要为每个重复创建输出文件夹吗?有人可以帮我吗?

for dir in */; do
    for r in in1; do
        glob=*.${r}
        "./soft" -in1 "$dir"/$glob -in2 "$dir"/$(basename -s .tpl $glob).in2 ;
    done
done

1 个答案:

答案 0 :(得分:0)

  

首先,递归运行脚本(在所有文件夹中),其次,在每个文件夹中运行脚本的“ X”重复。我让该脚本递归运行。

首先,请先读取根文件夹中所有文件夹的列表,然后再“更改目录”到文件夹列表中的每个条目,然后执行脚本,而不是执行递归操作。

请在下面找到示例代码:

#!/bin/sh

if [ ! -z "${1}" ];
then
    DIR_LIST=$(ls -d "${1}/*")
    for dir in "${DIR_LIST}";
    do
      cd ${dir}
      # run your script here
    done
fi