我使用以下命令有时在使用hg时删除已更改的文件。
hg status -n | xargs rm
我遇到了一个问题,如果输出
hg status -n
包含将找不到文件中包含空格的任何文件路径。通常我会引用或转义文件名中的空格,但我不知道如何使用管道输出执行此操作。任何帮助都会非常感谢:)。
答案 0 :(得分:4)
告诉两个命令使用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 :(得分:2)
我没有安装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
答案 2 :(得分:1)
让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
答案 3 :(得分:0)
在-0
旁边,较新的xargs
有-d
选项可以帮助您完成此类操作:
<command returning \n-separated paths> | xargs -d \\n rm -v