grep命令在testdir中工作但不在“真实”目录中

时间:2010-07-15 13:27:47

标签: linux grep filenames

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

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

但是在非test-direcory中使用该命令该命令不起作用: 这是错误消息:

grep: unknown option -- O
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

这甚至没有用:

$ grep -H author *.xml

或者这个:

$ grep -H 'author' *.xml

(相同的错误信息)

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

更多信息:

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

1 个答案:

答案 0 :(得分:1)

试试这个(更新):

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

说明(已更新)

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

  • 使用--(小写L)选项,-l仅输出匹配文件的文件名,因此您无需使用grep

  • 要正确处理每个奇怪的文件名,您必须使用cut中的-Zgrep中的-0对。

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

希望这会有所帮助!