gawk:如何使用NUL字符分隔符

时间:2018-04-03 18:32:09

标签: awk cygwin gawk xargs mawk

我正在使用Subversion进行源代码管理,并且想要一种从工作区清除未版本控制文件的脚本方式。虽然在这个例子中我的grep不仅仅是"^?",但它可以作为我想要做的事情的充分示例......有些内容如下:

svn status | grep "^?" | grep -v "\.exe\b*" | gawk "{print $2}" | xargs -0 rm

svn status | grep "^?" | grep -v "\.exe\b*" | gawk "{print $2}" | xargs -n 1 rm

我的问题是rm程序看到的是没有目录分隔符的文件路径名(我认为它们被解释为转义字符)。即而不是“Tests\results\filename.txt”,rm程序获取“Testsresultsfilename.txt”,这当然不是真正的文件名。

grep "^?"仅选择代表工作区中未版本控制文件的那些行,grep -v "\.exe\b*"会消除构建产品可执行文件的任何结果,gawk "{print $2}"只给出文件名部分在svn status输出中,省略了前导“?”,这意味着它是一个未版本控制的文件。 -0的{​​{1}}参数告诉它期望stdin使用NUL字符终止符而不是空格,例如xargs及其find参数的输出很有用。我希望通过我的-print0输出来实现类似的功能,但搜索gawk documentation并没有发现任何明显的结果。上面例子的最终结果是我要么删除一个假设的文件名,这个文件名是每个无版本文件的串联(它说文件名太长了,但实际上它是我想要删除的所有文件名集中在一起) ,或者在第二个例子中,我尝试单独删除每个未版本控制的文件(该部分是好的),但路径名都被挤压在一起,因为它认为路径反斜杠是一个转义字符。

我该如何做到这一点?

0 个答案:

没有答案
相关问题