【问题标题】:How can I grep hidden files?如何grep隐藏文件?
【发布时间】:2012-04-29 20:25:12
【问题描述】:

我正在搜索一个 Git 存储库,并希望包含 .git 文件夹。

grep 如果我运行则不包含此文件夹

grep -r search *

包含此文件夹的 grep 命令是什么?

【问题讨论】:

    标签: grep hidden-files dotfiles


    【解决方案1】:

    请参阅本文末尾的解决方案,作为您正在做的更好的替代方案。

    您可以显式包含隐藏文件(目录也是文件)。

    grep -r search * .[^.]*
    

    * 将匹配除隐藏文件之外的所有文件,.[^.]* 将仅匹配没有.. 的隐藏文件。但是,如果给定目录中没有非隐藏文件或没有隐藏文件,这将失败。您当然可以显式添加 .git 而不是 .*

    但是,如果您只是想在给定目录中搜​​索,请这样做:

    grep -r search .
    

    . 将匹配当前路径,其中包括非隐藏文件和隐藏文件。

    【讨论】:

    • 第一种方法(grep -r search * .*)对我有用。第二种方法(grep -r search.)没有找到字符串。省略“-r”并仅搜索顶级目录时,我发现了类似的结果。我正在使用 GNU grep 2.6.3。
    • 使用.* 将包含父目录(因为.. 匹配)
    • 在所有*.go 文件中grep 字符串"func foobar(" 的正确命令是什么,包括隐藏子目录中的文件?
    • 是否可以安全地概括此解决方案,因为外壳之间的行为可能会有所不同?
    • 对于第一个版本,您应该添加 --exclude-dir=.. 以避免在父文件夹中搜索
    【解决方案2】:

    我刚遇到这个问题,根据@bitmask的回答,为了避免@sehe指出的问题,这里是我的简单修改:

    grep -r search_string * .[^.]*
    

    【讨论】:

    • 我没有得到任何结果使用这个:sudo grep -r ANDROID_HOME * .[^.]*我在这里做错了什么?
    • @messerbill 你在哪里运行搜索?
    【解决方案3】:

    也许您更喜欢将“grep”与“find”命令结合使用以获得完整的解决方案,例如:

    find . -exec grep -Hn search {} \;
    

    此命令将在隐藏文件或目录中搜索字符串“search”并列出与此输出格式重合的所有文件:

    文件路径:行号:重合行

    ./foo/bar:42:search line
    ./foo/.bar:42:search line
    ./.foo/bar:42:search line
    ./.foo/.bar:42:search line
    

    【讨论】:

      【解决方案4】:

      假设您正在搜索当前目录(否则将 . 替换为所需目录),您可能希望使用这种方法:

      find . -type f | xargs grep search
      

      或者如果您只是想在顶层搜索(如果您正在尝试这些会更快地进行测试):

      find . -type f -maxdepth 1 | xargs grep search
      

      更新:我修改了示例以响应 Scott 的 cmets。我还添加了“-type f”。

      【讨论】:

      • (1)~ 是用户的主目录。问题与用户的主目录无关,因此答案不应提及~。 (2)Inafind 命令,-name '*' 是无操作(即没有任何用途)。
      【解决方案5】:

      为防止匹配不是隐藏文件的...,您可以使用grepls -A,如下例所示:

      ls -A | grep "^\."
      

      ^\. 声明第一个字符必须是.

      -A--almost-all 选项会排除结果 ...,以便仅匹配隐藏的文件和目录。

      【讨论】:

        【解决方案6】:

        仅在您当前位置的所有隐藏文件和目录中搜索:

        find . -name ".*" -exec grep -rs search {} \;
        

        仅限所有隐藏文件:

        find . -name ".*" -type f -exec grep -s search {} \;
        

        仅限所有隐藏目录:

        find . -name ".*" -type d -exec grep -rs search {} \;
        

        【讨论】:

          【解决方案7】:

          所有其他答案都更好。这个可能很容易记住:

          find . -type f | xargs grep search
          

          它只查找文件(包括隐藏文件)并 greps 每个文件。

          【讨论】:

            【解决方案8】:

            要仅在某个文件夹中查找,您可以使用:

            ls -al | grep " \."
            

            这是一个非常简单的命令来列出和管道到 grep。

            【讨论】:

              【解决方案9】:

              除了 Tyler 的建议,这里是递归 grep 所有文件和文件夹的命令,包括隐藏文件

              find . -name "*.*" -exec grep -li 'search' {} \;
              

              【讨论】:

                【解决方案10】:

                您还可以搜索特定类型的隐藏文件,例如隐藏目录文件:

                grep -r --include=*.directory "search-string"
                

                这可能比其他一些选项效果更好。其他可行的选项可能太慢了。

                【讨论】:

                • 就像上面描述的一样。您需要先cd进入目录并阅读“特定类型的隐藏文件”部分。
                • 我不明白 --include=*.directory 应该做什么 - 我的所有目录都不是以 .directory 结尾的吗?
                • 否:这些是 Linux 目录中的隐藏文件。使用文件资源管理器打开一个文件夹(例如,将图像设置为文件夹图标)并显示隐藏文件。通常有一个“.directory”文件。
                • 那为什么是明星呢?
                • 另外,这个问题专门针对.git,或者一般包括隐藏目录
                猜你喜欢
                • 1970-01-01
                • 2016-02-02
                • 1970-01-01
                • 2011-01-15
                • 2021-07-08
                • 1970-01-01
                • 2015-02-15
                • 2014-08-10
                • 2012-10-24
                相关资源
                最近更新 更多