我以为我找到了我的解决方案,因为该命令在我的测试目录中有效。
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个文件。 在两个目录中,几乎所有文件名都包含空格和“ - ”。
更多信息:
答案 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
中的-Z
和grep
中的-0
对。
无需使用xargs
,因为您的模式不是以-e
开头。
希望这会有所帮助!