Ins*_*ere 5 linux directory shell find
在我的目录层次结构中,我有许多名为 STATUS.txt 的文本文件。这些文本文件每个都包含一个关键字,例如 COMPLETE、WAITING、FUTURE 或 OPEN。我希望执行以下形式的 shell 命令:
./mycommand OPEN
它将列出包含名为 STATUS.txt 的文件的所有目录,其中该文件包含文本“OPEN”
将来我想扩展这个脚本,以便对返回的目录进行排序。排序将由存储在文件 PRIORITY.txt 中的数值决定,该文件与 STATUS.txt 位于同一目录中。但是,这可以等到我的能力水平提高。目前,我很乐意以任何顺序列出目录。
我在 Stack Overflow 上搜索了以下内容,但无济于事:
我尝试了以下 shell 命令:
这有助于我识别包含 STATUS.txt 的所有目录
$ find ./ -name STATUS.txt
Run Code Online (Sandbox Code Playgroud)
这会为包含它的每个目录读取 STATUS.txt
$ find ./ -name STATUS.txt | xargs -I{} cat {}
Run Code Online (Sandbox Code Playgroud)
这不会返回任何文本,我希望它会返回每个目录的名称
$ find . -type d | while read d; do if [ -f STATUS.txt ]; then echo "${d}"; fi; done
Run Code Online (Sandbox Code Playgroud)
尝试这样的事情
find -type f -name "STATUS.txt" -exec grep -q "OPEN" {} \; -exec dirname {} \;
Run Code Online (Sandbox Code Playgroud)
或者在脚本中
#!/bin/bash
(($#==1)) || { echo "Usage: $0 <pattern>" && exit 1; }
find -type f -name "STATUS.txt" -exec grep -q "$1" {} \; -exec dirname {} \;
Run Code Online (Sandbox Code Playgroud)