【问题标题】:Command line bash for entering multiple directories and executing a command用于进入多个目录并执行命令的命令行 bash
【发布时间】:2015-02-04 15:47:20
【问题描述】:

我是这个网站的新手(和编程,或多或少),但我希望你能提供帮助。

我有许多名为 3K、4K、5K 等的目录。在每个目录中,我有 12 个名为 v1 到 v12 的子目录,每个子目录都包含一个名为 OUTCAR 的文件。我正在尝试编写一个 bash 命令,该命令将允许我进入每个子目录并从 OUTCAR 收集数据。

当我单独输入每个子目录时,该功能没有问题。

我正在使用

v{1..12} 中的文件;执行 grep "key_string" OUTCAR | awk '{print(relevant_stuff)}' > output.dat ;完成

来自包含 v{1..12} 子目录的 *K 罚款。

但是,我收到一条错误消息,告诉我每个 v{1..12} 都不存在 OUTCAR。我知道确实如此,所以我猜我没有正确地将命令 cd 引导到每个子目录中。有什么建议吗?

谢谢!

【问题讨论】:

  • 应该将所有输出放入一个 output.dat 文件中,还是希望在每个 OUTCAR 文件旁边都有一个 output.dat 文件?总体而言,使用诸如“find -name OUTCAR”之类的查找命令并通过 xargs 执行 grepping/awking 或使用“while read”循环迭代结果可能更容易。
  • 我的目标是为每个 OUTCAR 生成一个单独的 output.dat 文件,打印到每个 v1 到 v12 子目录中。

标签: linux bash command-line do-loops


【解决方案1】:

您最好从存在这些子目录的顶级目录中使用此 find 命令:

find . -type d -name 'v[1-9][[1-9]' \
    -exec awk '/key_string/ {print FILENAME ":" $0}' {}/* >> output.dat \;

【讨论】:

  • 非常感谢您的回复!你能帮我解释一下 -type 和 -name 吗?
  • 您可以从man find获取详细信息。 -type d 只查找目录,-name 匹配目录名称的模式。
猜你喜欢
  • 1970-01-01
  • 2019-06-22
  • 2017-05-02
  • 2012-05-27
  • 2019-05-04
  • 2010-11-03
  • 2020-09-17
  • 2012-11-13
  • 1970-01-01
相关资源
最近更新 更多