Shell:如何使用自动脚本删除mercurial文件?

时间:2012-04-03 18:24:40

标签: shell

我想创建一个小脚本,删除我的Symfony项目中的所有文件, mercuaril 将我作为不需要的文件。

例如:

hg status:

...

? web/images/lightwindow/._arrow-up.gif
? web/images/lightwindow/._black-70.png
? web/images/lightwindow/._black.png
? web/images/lightwindow/._nextlabel.gif
? web/images/lightwindow/._pattern_148-70.png
? web/images/lightwindow/._pattern_148.gif
? web/images/lightwindow/._prevlabel.gif
? web/js/._lightwindow.js
? web/sfPropel15Plugin
? web/sfProtoculousPlugin

我想删除所有标有的文件。只有这些。不是经过修改的 - M - 等等。

我正在尝试为此做一个迷你剧本:

hg status | grep '^?*' | rm -f

我不知道是否可以。你能帮我一个吗?

2 个答案:

答案 0 :(得分:0)

试试这个:

hg status|awk '/^? /{gsub(/^\? /, "", $0);print;}'|while read line; do
    rm -f "$line"
done

awk命令匹配以“?”开头的所有内容,并执行块'{gsub(/ ^ \?/,“”,$ 0); print;}'。该块在$0(整个匹配的行)上进行替换,将起始“?”替换为空,使$0只是文件名。 print然后打印$0(打印时没有默认打印$0

因此awk输出会打印一个文件名列表,每行一个。这被送入一个读取循环,删除每个。

这将保留文件名中的空格,但如果有任何包含换行符的文件名,它将会中断!以hg status作为输入,无法正常处理换行符,因为hg status打印换行符分隔的输出

答案 1 :(得分:0)

你缺少xargs,它接受​​输入并将其作为参数提供给命令(现在你实际上是将它们发送到rm的标准输入,这没有意义)。类似的东西:

hg status | grep '^?' | cut -d' ' -f2 | xargs rm -f

注意:如果文件名包含空格,则无效。它仍然是可能的,但你需要更聪明。