命令获取不包含特定字符串但仅来自与名称regex匹配的目录的所有文件的列表



目录-

  • home/Modules/abc/iAmAFile
    iAmAFile的内容:Random123
  • home/Modules/atoz/iAmAFile
    iAmAFile的内容:Random123
  • home/Modules/23abc/iAmAFile/src
    iAmAFile的内容:Random1
  • home/Modules/123abc/iAmAFile
    iAmAFile的内容:Random3
  • home/Modules/123a/src/iAmAFile
    iAmAFile的内容:Random1

我正在寻找的输出是:

  • home/Modules/23abc/src/iAmAFile(内容为Random1)
  • home/Modules/123abc/iAmAFile(内容Random3)

解释:这些文件不包含Random123,并且是名称为abc的目录的子目录。

home/Modules/123a/src/iAmAFile不合格,因为它在子文件iAmAFile中没有Random123,但父目录或父目录之前的目录名称不合格,原因是它不包含abc

其他两个不符合iAmAFile具有字符串Random123的条件

我想出的命令是:

ls -F Modules/*abc | grep -r -L --include="iAmAFile" "Random123"

它给出一个输出

  • home/Modules/23abc/src/iAmAFile
    (内容为Random1)
  • home/Modules/123abc/iAmAFile**
    (内容为Random3)
  • home/Modules/123a/src/iAmAFile
    (内容为随机1)

它包括与命名条件不匹配的目录。

建议在path上组合负grep(grep -v)和正find滤波器。

grep -L "Random123" $(find . -type f -path "*abc*")

解释

find . -type f -path "*abc*"

在路径中列出包含abc的目录下的所有文件。

grep -L "Random123" <files list>

列出所有不包含Random123字符串的文件。来自<files list>

最新更新