【问题标题】:Output from a bash script looping through multiple directories循环通过多个目录的 bash 脚本的输出
【发布时间】:2012-06-11 17:31:42
【问题描述】:

我目前正在尝试编写一个循环遍历多个目录的脚本。主 raw_data 目录包含约 150 个子目录(subj001、subj002、...、subj00n),每个子目录都有几个子目录。

如何确保将下面给出的脚本的输出发送回输入的特定子目录(例如 subj0012),而不是当前目录 (raw_data)?

#!/bin/bash

for dir in ~raw_data/*
do
  tractor -d -r -b preproc RunStages:1 
done 

谢谢。

【问题讨论】:

  • tractor 是否从当前目录读取其输入,并将输出写入同一目录?从您的示例中可以看出,dir 的当前值不会影响tractor 的工作方式。
  • 是的。这一直是个问题。到目前为止,我一直在手动指定目录来处理这个问题。但是,我尝试过的所有使用循环的脚本都失败了。如果您有任何建议,我将不胜感激。如果我没有足够清楚地提出问题,我深表歉意,但我不是 linux 的高级用户。

标签: linux bash shell scripting


【解决方案1】:

您要将输出保存到的目录名称在$dir 中,对吗?因此,只需通过重定向将输出发送到那里:

#!/bin/bash
for dir in ~raw_data/* ; do
    tractor -d -r- b preproc RunStages:1 > $dir/output
done

不过,您应该确保您正在处理的确实是一个目录。

【讨论】:

  • 数据的结构和大小使脚本变得复杂。我想将每个输出发送到原始主题目录(subj001)而不是研究目录(raw_data)。
【解决方案2】:

您可以使用find 的输出来运行循环并将输出附加到所需位置,如下所示:

while read d
do
    echo $d >> ~raw_data/subj0012/output
done < <(find ~raw_data -type d)

【讨论】:

    猜你喜欢
    • 2011-08-20
    • 2018-08-27
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2013-03-10
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多