【问题标题】:Grep within folders with a space in their names名称中带有空格的文件夹中的 Grep
【发布时间】:2018-04-13 14:03:24
【问题描述】:

我正在尝试在具有 .cs 扩展名的根目录中的所有文件夹中查找特定字符串。但是,一些文件夹有一个空格,所以我的 grep 命令失败了。

搜索了其他帖子,但找不到确切的答案。有没有更有效的方法来做这个搜索?

想知道我能做些什么来逃离文件夹或文件名中的这个空间。

find . -name \*.cs -print | xargs grep -win "Test String" > TesString.log

在我的根目录中有空格的文件夹 -

D:\TestDrive\C Sharp\Batch\MyCode

grep 失败

grep: ./TestDrive/C: Is a directory
grep: Sharp/Batch/MyCode/Program.cs: No such file or directory

【问题讨论】:

    标签: linux shell unix grep command-line-interface


    【解决方案1】:

    您可以使用递归的grep 代替find | xargs grep ..

    grep -winr 'Test String' --include=*.cs .
    

    对于您的命令,您需要使用-print0xargs -0 使find 输出以nul 结尾的文件名:

    find . -name '*.cs' -print0 | xargs -0 grep -win "Test String" > TesString.log
    

    您也可以在find 本身中使用-exec 选项:

    find . -name '*.cs' -exec grep -win "Test String" {} + > TesString.log
    

    【讨论】:

    • 感谢@anubhava,但这无法搜索任何带有 .cs 扩展名的文件名。
    • 这显示了所有文件,但是当我使用 grep 命令运行它时,它没有找到该文件 - 没有输出
    • 是的,我有一个包含“测试字符串”的文件。我也检查了输出文件,但也没有写入任何内容。
    • 它对我来说很好用。试试:grep -winr 'Test String' --include=*.cs .
    • 感谢您的帮助@Anubhava。欣赏它。
    猜你喜欢
    • 1970-01-01
    • 2018-10-23
    • 2017-04-25
    • 2013-06-22
    • 1970-01-01
    • 2018-04-18
    • 2015-02-08
    • 2014-01-04
    • 1970-01-01
    相关资源
    最近更新 更多