【问题标题】:Identify folders that do not have files with a certain string识别没有带有特定字符串的文件的文件夹
【发布时间】:2015-02-22 22:22:05
【问题描述】:

第一次来这里,如果我没有以正确的方式问这个问题,请原谅。 我曾尝试使用 grep -rL 以及 find 和 xargs 的变体,但没有什么能完全满足我的要求。我想确定哪些子文件夹(大约 500 个)没有任何带有字符串“ObjectDate=true”的文件(它们都是 xml 文件)。

谢谢!

感谢您的帮助。也许我可以说得更好。我有一个目录的大约 500 个子文件夹。这些子文件夹没有子文件夹。几乎所有文件夹都包含多个带有字符串“ObjectDate=true”的 xml 文件。我想用字符串“ObjectDate=true”确定哪些子文件夹不包含任何 xml 文件。

下面的命令显示了哪些文件不包含该字符串。结果太多了,所以我想知道哪些文件夹没有包含该字符串的文件。

grep -rL "ObjectDate=true" /prod/he/log/dws/Usr//.xml

【问题讨论】:

  • 这是一个准备不足的问题(注意:反对票不是我的;D)。目录结构是什么?目录是否遵循某些命名约定?
  • find -mindepth 1 -maxdepth 1 -type d -print0 | while IFS= -r -d $'\0' dir; do [[ -n $(find "$dir" -type f -name "*.xml" -exec grep -q "ObjectDate=true" {} \; -print -quit) ]] || echo "Missing $dir"; done 之类的东西可能会起作用,尽管我还没有测试过,而且它绝对不是最佳的。也不确定subfolders do not have 是指仅在子文件夹的顶层或任何地方,以上假定为后者。
  • 感谢您的帮助。

标签: linux search grep find


【解决方案1】:

简单的方法是:

find . -type d -print |
while IFS= read -r dir
do
    if ! grep -m1 -q "ObjectDate=true" "$dir"/*.xml
    then
        echo "$dir"
    fi
done

假设没有包含换行符的目录名称。

【讨论】:

  • 谢谢,请原谅我的无知。我可以从命令行运行该命令吗?或者我需要将其放入 csh 文件或类似文件中吗?
  • 您可以从命令行运行它或将其放入 shell 脚本中。但是,您永远不应该在 csh 中编写 shell 脚本,谷歌“csh 为什么不”。
  • 非常感谢!这正是我所需要的——我自己永远也想不通。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-08
  • 1970-01-01
  • 2015-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
相关资源
最近更新 更多