在我的目录层次结构中,有许多名为STATUS.txt的文本文件。这些文本文件每个都包含一个关键字,例如COMPLETE、WAITING、FUTURE或OPEN。我希望执行以下形式的shell命令:
将来,我需要扩展此脚本,以便返回的目录已排序。排序由存储在与STATUS.txt相同的目录中的数字值PRIORITY.txt决定。然而,这可以等到我的能力提高之后再处理。目前,我愿意按任何顺序列出目录。
我已经在Stack Overflow上搜索了以下内容,但没有找到合适的答案:
./mycommand OPEN
它会列出所有包含名为STATUS.txt的文件夹,其中此文件夹包含文本"OPEN"。将来,我需要扩展此脚本,以便返回的目录已排序。排序由存储在与STATUS.txt相同的目录中的数字值PRIORITY.txt决定。然而,这可以等到我的能力提高之后再处理。目前,我愿意按任何顺序列出目录。
我已经在Stack Overflow上搜索了以下内容,但没有找到合适的答案:
- unix filter by file contents
- linux filter by file contents
- shell traverse directory file contents
- bash traverse directory file contents
- shell traverse directory find
- bash traverse directory find
- linux file contents directory
- unix file contents directory
- linux find name contents
- unix find name contents
- shell read file show directory
- bash read file show directory
- bash directory search
- shell directory search
$ find ./ -name STATUS.txt
这会读取每个包含 STATUS.txt 文件的目录
$ find ./ -name STATUS.txt | xargs -I{} cat {}
这并没有返回任何文字,我原本希望它会返回每个目录的名称
$ find . -type d | while read d; do if [ -f STATUS.txt ]; then echo "${d}"; fi; done
--include="STATUS.txt"
,否则如果其他文件名中包含了OPEN
,它仍会返回这些文件名。 - Reinstate Monica Please--include="STATUS.txt"
中所提到的问题。 - Insert name hereGNU grep
可以这样做,不确定是否有方法只使用BSD grep
来实现。就其在打印许多结果之前花费很长时间而言,这似乎是缓冲区问题。你可以尝试使用“--line-buffered”,尽管这将在技术上使总运行时间略微延长。 - Reinstate Monica Pleasesed
技巧,您可以使用grep -h
避免打印文件名。此外,请注意您正在使用的sed
带有/g
,这是不必要的,因为您只想让它在每行中执行一次,而g
会使其出现与STATUS.txt
相同的次数。 - fedorqui