查找包含多个匹配正则表达式/grep 的文件夹

小牛

我有一个包含数千个文件夹的文件夹结构。我希望能够找到所有文件夹,例如,包含多个 .txt 文件、多个 .jpeg 或其他任何文件夹,而不会看到任何仅包含此类单个文件的文件夹。

这些文件夹都应该只有一个特定类型的文件,但情况并非总是如此,并且尝试查找它们很乏味。

请注意,文件夹可能包含许多其他文件。

如果可能,我想将“FILE.JPG”和“file.jpg”匹配为匹配“file”或“jpg”的查询。

我一直在做的只是find . -iname "*file*"手动完成。

文件夹包含文件夹,有时有 3 或 4 层深

first/
  second/
     README.txt
     readme.TXT
     readme.txt
     foo.txt
   third/
     info.txt
   third/fourth/
     raksljdfa.txt

应该返回

first/second/README.txt
first/second/readme.TXT
first/second/readme.txt
first/secondfoo.txt```

搜索“txt”时

first/second/README.txt
first/second/readme.TXT
first/second/readme.txt

搜索“自述文件”时

pjh

这个纯 Bash 代码应该这样做(注意事项,见下文):

#! /bin/bash

fileglob=$1             # E.g. '*.txt' or '*readme*'

shopt -s nullglob       # Expand to nothing if nothing matches
shopt -s dotglob        # Match files whose names start with '.'
shopt -s globstar       # '**' matches multiple directory levels
shopt -s nocaseglob     # Ignore case when matching

IFS=                    # Disable word splitting

for dir in **/ ; do
    matching_files=( "$dir"$fileglob )
    (( ${#matching_files[*]} > 1 )) && printf '%s\n' "${matching_files[@]}"
done

运行程序时,将要匹配的模式作为参数提供给程序。例如

myprog '*.txt'
myprog '*readme*'

(模式上的引号是阻止它们匹配当前目录中的文件所必需的。)

关于代码的警告是:

  1. globstar是在 Bash 4.0 中引入的。该代码不适用于较旧的 Bash。
  2. 在 Bash 4.3 之前,globstar匹配遵循符号链接。这可能会导致重复输出,甚至由于循环链接而导致失败。
  3. **/模式扩展为层次结构中所有目录的列表。如果目录数量很大(例如,大于一万),这可能需要很长时间或使用过多的内存。

如果您的 Bash 版本早于 4.3,或者您有大量目录,则此代码是更好的选择:

#! /bin/bash

fileglob=$1             # E.g. '*.txt' or '*readme*'

shopt -s nullglob       # Expand to nothing if nothing matches
shopt -s dotglob        # Match files whose names start with '.'
shopt -s nocaseglob     # Ignore case when matching

IFS=                    # Disable word splitting

find . -type d -print0 \
    |   while read -r -d '' dir ; do
            matching_files=( "$dir"/$fileglob )
            (( ${#matching_files[*]} > 1 )) \
                && printf '%s\n' "${matching_files[@]}"
        done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用正则表达式查找和grep仅获取文件夹

来自分类Dev

通过正则表达式搜索词grep多个文件夹的方法

来自分类Dev

正则表达式匹配文件夹和所有子文件夹

来自分类Dev

使用 bash 脚本中文件中的正则表达式进行 Grep 而不包含更多文件夹

来自分类Dev

如何从路径列表中使用正则表达式查找文件或文件夹

来自分类Dev

正则表达式 - 如何在动态文件夹名称中查找文件

来自分类Dev

文件夹路径的正则表达式

来自分类Dev

如何使用PowerShell删除与正则表达式匹配的文件夹中的文件?

来自分类Dev

如何使用正则表达式查找文件夹的真实路径

来自分类Dev

修改正则表达式以匹配扩展文件夹的说明

来自分类Dev

正则表达式匹配没有子文件夹的域

来自分类Dev

正则表达式以匹配文件夹结构中的有效路径

来自分类Dev

正则表达式以匹配带有或不带有“文件夹”的URL

来自分类Dev

修改正则表达式以匹配扩展文件夹的说明

来自分类Dev

正则表达式匹配没有子文件夹的域

来自分类Dev

在多个文件中查找并替换正则表达式(匹配Unicode字符类Devanagari)

来自分类Dev

查找与正则表达式模式匹配的文件

来自分类Dev

使用正则表达式重命名多个文件夹

来自分类Dev

Nodemon使用正则表达式表达式忽略文件夹

来自分类Dev

如何将正则表达式应用于包含.txt文件的文件夹?

来自分类Dev

正则表达式将文件夹名称与Productivity Power Tools颜色编码进行匹配

来自分类Dev

正则表达式以匹配文件夹内容的互补子组(Webpack供应商捆绑包)

来自分类Dev

PowerShell 查看是否存在与 env:systemroot 匹配且名称较长的正则表达式的文件夹

来自分类Dev

如何通过带有文件夹名称正则表达式的python打开文件?

来自分类Dev

如何在正则表达式的grep中查找每个文件的grep计数

来自分类Dev

仅列出与通配符表达式匹配的文件夹

来自分类Dev

grep中的正则表达式,用于包含A,B,C ...但不包含Z的文件

来自分类Dev

正则表达式以选择UNC中的最后一个文件夹

来自分类Dev

正则表达式获取最后三个文件夹

Related 相关文章

  1. 1

    使用正则表达式查找和grep仅获取文件夹

  2. 2

    通过正则表达式搜索词grep多个文件夹的方法

  3. 3

    正则表达式匹配文件夹和所有子文件夹

  4. 4

    使用 bash 脚本中文件中的正则表达式进行 Grep 而不包含更多文件夹

  5. 5

    如何从路径列表中使用正则表达式查找文件或文件夹

  6. 6

    正则表达式 - 如何在动态文件夹名称中查找文件

  7. 7

    文件夹路径的正则表达式

  8. 8

    如何使用PowerShell删除与正则表达式匹配的文件夹中的文件?

  9. 9

    如何使用正则表达式查找文件夹的真实路径

  10. 10

    修改正则表达式以匹配扩展文件夹的说明

  11. 11

    正则表达式匹配没有子文件夹的域

  12. 12

    正则表达式以匹配文件夹结构中的有效路径

  13. 13

    正则表达式以匹配带有或不带有“文件夹”的URL

  14. 14

    修改正则表达式以匹配扩展文件夹的说明

  15. 15

    正则表达式匹配没有子文件夹的域

  16. 16

    在多个文件中查找并替换正则表达式(匹配Unicode字符类Devanagari)

  17. 17

    查找与正则表达式模式匹配的文件

  18. 18

    使用正则表达式重命名多个文件夹

  19. 19

    Nodemon使用正则表达式表达式忽略文件夹

  20. 20

    如何将正则表达式应用于包含.txt文件的文件夹?

  21. 21

    正则表达式将文件夹名称与Productivity Power Tools颜色编码进行匹配

  22. 22

    正则表达式以匹配文件夹内容的互补子组(Webpack供应商捆绑包)

  23. 23

    PowerShell 查看是否存在与 env:systemroot 匹配且名称较长的正则表达式的文件夹

  24. 24

    如何通过带有文件夹名称正则表达式的python打开文件?

  25. 25

    如何在正则表达式的grep中查找每个文件的grep计数

  26. 26

    仅列出与通配符表达式匹配的文件夹

  27. 27

    grep中的正则表达式,用于包含A,B,C ...但不包含Z的文件

  28. 28

    正则表达式以选择UNC中的最后一个文件夹

  29. 29

    正则表达式获取最后三个文件夹

热门标签

归档