【问题标题】:grep command working in testdir but not in "real" directorygrep 命令在 testdir 中工作,但不在“真实”目录中
【发布时间】:2011-03-16 09:59:50
【问题描述】:

我只是以为我找到了解决方案,因为该命令在我的测试目录中有效。

grep -H -e 'author="[^"].*' *.xml | cut -d: -f1 | xargs -I '{}' mv {} mydir/.

但是使用非测试目录中的命令该命令不起作用: 这是错误信息:

grep:未知选项--O 用法:grep [OPTION]... PATTERN [FILE]... 试试 `grep --help' 以获得更多信息。

甚至这都行不通:

$ grep -H author *.xml

或者这个:

$ grep -H 'author' *.xml

(同样的错误信息)

我怀疑它与文件名或文件数量有关。 我在非测试目录中有近 3000 个文件,而我的测试目录中只有 20 个。 在这两个目录中,几乎所有文件名都包含空格和“ - ”。

更多信息:

  • 我正在使用 Cygwin。
  • 我不允许更改文件名

【问题讨论】:

    标签: linux grep filenames


    【解决方案1】:

    试试这个(更新):

    grep -HlZ 'author="[^"].*' -- *.xml | xargs -0 -I {} mv -- {} mydir/
    

    解释(更新)

    • 在您的“真实”目录中,您有一个名称以-O 开头的文件。 您的 shell 扩展文件列表 *.xmlgrep 将您的 - 起始文件名作为选项(无效)。 mv 也会发生同样的事情。正如info coreutilsCommon options 部分所述,您可以使用-- 来分隔选项列表。 -- 之后的内容被视为操作数,而不是选项。

    • 使用-l(小写L)选项,grep只输出匹配文件的文件名,所以你不需要使用cut

    • 要正确处理每个奇怪的文件名,您必须在grep 中使用-Zxargs 中的-0

    • 无需使用-e,因为您的模式不是以- 开头的。

    希望这会有所帮助!

    【讨论】:

    • 非常感谢您的好建议!现在至少解决了一部分问题。上帝的消息: grep 没有抱怨,它找到一个文件(这个可怕的名字):!!导入设备 - 稍后完成.xml 坏消息:grep 不会列出包含搜索字符串的所有文件 - 例如这些以单破折号、双破折号和三个下划线开头的文件:-OFF.xml --operation.xml ___Checklist - 菜单.xml 我应该对变量 IFS 做些什么吗? /T
    • @Tony:我认为grep 列出了这些文件,问题是mv。您也必须使用mv 来完成-- 的技巧。现在我将编辑答案以解决问题。如果可行,请接受我的回答! :)
    • @Tony:太好了,您喜欢我的回答...请记住将我的回答设置为已接受! :)
    猜你喜欢
    • 1970-01-01
    • 2014-01-31
    • 2013-09-28
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多