我只是以为我find了我的解决scheme,因为该命令在我的testing目录中工作。
grep -H -e 'author="[^"].*' *.xml | cut -d: -f1 | xargs -I '{}' mv {} mydir/.
但是在非test-direcory中使用该命令不起作用:这是错误消息:
grep:未知选项 - O 用法:grep [OPTION] ... PATTERN [FILE] ... 尝试`grep --help'获取更多信息。
甚至没有这个工作:
$ grep -H author *.xml
或这个:
$ grep -H 'author' *.xml
(同样的错误信息)
我怀疑它与文件名或文件的数量有一些关系。 我在非testing目录中有将近3000个文件,而在我的testing目录中只有20个。 在这两个目录中几乎所有文件名都包含空格和“ – ”。
一些更多信息:
试试这个(更新):
grep -HlZ 'author="[^"].*' -- *.xml | xargs -0 -I {} mv -- {} mydir/
说明 (更新)
在你的“真实”目录中,你有一个名字以-O
开头的文件。 你的shell扩展文件列表*.xml
, grep
把你的起始文件名作为一个选项(无效)。 同样的事情发生在mv
。 正如在info coreutils
的Common options
部分中所解释的那样,您可以使用--
分隔选项列表。 什么之后--
被认为是一个操作数,而不是一个选项。
使用-l
(小写的L)选项, grep
只输出匹配文件的文件名,所以你不需要使用cut
。
要正确处理每一个奇怪的文件名,你必须在grep
使用-Z
,在xargs
使用-0
。
不需要使用-e
因为你的模式不以-
开头。
希望这会有所帮助!