linux - 用于进入多个目录并执行命令的命令行 bash

标签 linux bash command-line do-loops

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

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

当我分别进入每个子目录时,该功能没有问题。

我在用

for file in v{1..12} ; do grep "key_string" OUTCAR | awk '{print(relevant_stuff)}' > output.dat ; done

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

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

谢谢!

最佳答案

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

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

关于linux - 用于进入多个目录并执行命令的命令行 bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28325532/

相关文章:

c++ - TCLAP 中的 vector 参数

linux - 查找包含字符串的文件/文件夹并删除但排除字符串被删除

linux - 确定芯片组是否能够关闭数据包注入(inject)和监控模式

在 ubuntu 16 : set -e not inheriting inside subshell 上 bash

mysql - 简单的命令行命令在尝试导入 .sql 文件时出现语法错误

c - Getopt() 在 C 中接受其他选项作为参数

java 程序在 linux 上报告错误的时区(显示欧洲/都柏林的 IST)

linux - Shell 脚本子串直到空格

bash - docker容器nginx启动但一直挂起

bash - printf,忽略多余的参数?