我使用以下命令有时在使用hg时删除更改的文件。在命令之间转义管道输出
hg status -n | xargs rm
我所遇到的,其中如果
hg status -n
输出包含不会被发现与文件中的空格的文件路径的问题。通常我会引用或转义文件名称中的空格,但我不知道如何使用管道输出执行此操作。任何帮助将非常感谢:)
我使用以下命令有时在使用hg时删除更改的文件。在命令之间转义管道输出
hg status -n | xargs rm
我所遇到的,其中如果
hg status -n
输出包含不会被发现与文件中的空格的文件路径的问题。通常我会引用或转义文件名称中的空格,但我不知道如何使用管道输出执行此操作。任何帮助将非常感谢:)
告诉这两个命令来使用NUL作为分隔符:
hg status -n0 | xargs -0 rm
另外要注意:在-n
选项将打印甚至Mercurial不知道的文件。
也许你想要这个呢?
hg status -mn0 | xargs -0 rm
另外,不要忘了hg revert
或hg purge
。也许他们做你想做的事情,例如
hg revert --all --no-backup
或
.hgrc
[extensions]
hgext.purge=
壳
hg purge
+1 NUL是不需要惊喜的人的文件分隔符。 – l0b0 2012-04-03 15:10:51
使用NUL作为分隔符的+1非常感谢!有时候我发现在那里抛出一个'grep'并删除一部分文件是很有用的 - 比如当我不小心创建了一个***。orig **的负载时 - 例如 - 这就是为什么'revert'或'purge'不能(看'hg help revert'我看到我可以用'-I'。现在我有两种方法来做一些事情,我学到了一些新的东西!) – Dori 2012-04-06 08:38:21
请参阅'grep -z'了解如何过滤null-分界输出。 – Mikel 2012-04-12 03:27:09
我没有安装hg
。因此,我将与ls
做到这一点:
$ touch 'file A' 'file B'
$ ls -1
file A
file B
$ ls | xargs rm
rm: cannot remove `file': No such file or directory
rm: cannot remove `A': No such file or directory
rm: cannot remove `file': No such file or directory
rm: cannot remove `B': No such file or directory
$ ls | tr '\n' '\0' | xargs -0 rm
$ ls
让xargs的处理,与-I
选项:
hg status -n | xargs -I FileName rm FileName
-I
同时增加了安全性,但会降低效率,因为只有一个文件名会被传递为 'RM'
一个例子:
$ printf "%s\n" one "2 two" "three 3 3" | xargs printf "%s\n"
one
2
two
three
3
3
$ printf "%s\n" one "2 two" "three 3 3" | xargs -I X printf "%s\n" X
one
2 two
three 3 3
除了-0
,新xargs
有选项-d
它可以帮助你做这样的事情:
<command returning \n-separated paths> | xargs -d \\n rm -v
没有回答这些问题的帮助? – Mikel 2012-04-05 16:35:01
是的,谢谢,已接受您的答案 – Dori 2012-04-06 15:10:42