我以为我找到了解决方案,因为该命令在我的测试目录中有效。
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.
Not even this worked:
$ 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
仅输出匹配文件的文件名,因此您不需要使用剪切
。要正确处理每个奇怪的文件名,您必须在
grep
中使用-Z
对,在中使用
.-0
>xargs无需使用
-e
,因为您的模式不是以-
开头。
希望这会有所帮助!
关于linux - grep 命令在 testdir 中工作但不在 "real"目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3255918/