我有一个文件夹,其中包含名称中带有空格的目录/文件,我想将所有*.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中阻止此行为?
答案 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就足够了。