尝试grep查找-print0会导致奇怪的行为

时间:2015-06-20 22:57:33

标签: bash grep find null-character

我有一个文件夹,其中包含名称中带有空格的目录/文件,我想将所有*.ttf个文件复制到另一个目录,但文件夹Consolas和{{除外1}} 即可。在发布this后,我尝试了:

System Volume Information

出于某种原因,这会导致来自第一个grep的find ... -print0 | grep -v "System Volume Information" --null | grep -v "Consolas" --null | xargs -0 cp -t destination 消息。我尝试使用egrep来组合过滤器:

Binary file (standard input) matches

但是在这种情况下,即使除了find . -name '*.ttf' -print0 | egrep -v "(System Volume Information)|(Consolas)" --null | xargs... System Volume Information之外还有很多其他文件夹,egrep会向终端打印 nothing 。当我删除除命令的Consolas之外的所有部分时,由于find选项,我得到了一大块没有换行符的文本。由于整个块包含-print0,因此省略它我省略了所有内容。当我尝试对结果进行Consolas并打印出整个块时,我确认了这一点。

如何在grep中阻止此行为?

1 个答案:

答案 0 :(得分:-1)

这是使用grep的'-v'选项的预期行为。它通过不给你任何包含Consolas的行来做你告诉它的事情。为了避免这种情况,请不要使用-print0和post进程使用xargs(正如您已经发现的那样),或者如果您真的需要一起运行所有内容,请在'grep -v'过滤后通过以下方式执行:

echo -n $(find。-name'* .ttf'| grep -v“System Volume Information” - null | grep -v“Consolas”--null)

但是你可能不需要这个问题因为xargs就足够了。