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

问题描述:

我以为我找到了我的解决方案,因为该命令在我的测试目录中工作。grep命令在testdir中工作,但不在“真实”目录中

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

但是在非测试猪病使用该命令的命令没有工作: 这是错误消息:

 
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。
  • 我不允许更改文件名

试一下这个(更新):

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

说明(更新)

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

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

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

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

希望这会有所帮助!

+0

非常感谢您的好建议! 现在至少解决了部分问题。 上帝的消息:grep不会抱怨,它会发现一个文件(带有这个可怕的名字): !!导入设备 - 待完成later.xml 坏消息:grep未列出包含搜索字符串的所有文件 - 例如以单短划线,双短划线和三下划线开头的文件: -OFF.xml - 操作。 xml ___查看列表 - menu.xml 我应该对变量IFS做些什么吗? /T – Tony 2010-07-16 14:02:54

+0

@Tony:我认为'grep'列出了这些文件,问题是'mv'。你也必须用'mv'来做' - '技巧。现在我将编辑答案来解决问题。如果有效,请接受我的回答! :) – 2010-07-16 19:34:43

+0

是的,它的工作!好!/ T – Tony 2010-07-22 07:06:41