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扩展文件列表*.xml
和grep
将您的-
起始文件名作为选项(无效)。mv
发生同样的事情。正如info coreutils
的Common options
部分中所述,您可以使用--
来分隔选项列表。--
后面的内容被认为是操作数,而不是选项。使用
-l
(小写L)选项,grep
只输出匹配的文件的文件名,所以你不需要使用cut
。要正确处理每个奇怪的文件名,您必须使用中的
-Z
和xargs
中的-0
。无需使用
-e
,因为您的模式不以-
开头。
希望这会有所帮助!
非常感谢您的好建议! 现在至少解决了部分问题。 上帝的消息:grep不会抱怨,它会发现一个文件(带有这个可怕的名字): !!导入设备 - 待完成later.xml 坏消息:grep未列出包含搜索字符串的所有文件 - 例如以单短划线,双短划线和三下划线开头的文件: -OFF.xml - 操作。 xml ___查看列表 - menu.xml 我应该对变量IFS做些什么吗? /T – Tony 2010-07-16 14:02:54
@Tony:我认为'grep'列出了这些文件,问题是'mv'。你也必须用'mv'来做' - '技巧。现在我将编辑答案来解决问题。如果有效,请接受我的回答! :) – 2010-07-16 19:34:43
是的,它的工作!好!/ T – Tony 2010-07-22 07:06:41