我想创建一个小脚本,删除我的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
我不知道是否可以。你能帮我一个吗?
答案 0 :(得分:0)
试试这个:
hg status|awk '/^? /{gsub(/^\? /, "", $0);print;}'|while read line; do
rm -f "$line"
done
awk命令匹配以“ 因此awk输出会打印一个文件名列表,每行一个。这被送入一个读取循环,删除每个。 这将保留文件名中的空格,但如果有任何包含换行符的文件名,它将会中断!以?
”开头的所有内容,并执行块'{gsub(/ ^ \?/,“”,$ 0); print;}'。该块在$0
(整个匹配的行)上进行替换,将起始“?”替换为空,使$0
只是文件名。 print
然后打印$0
(打印时没有默认打印$0
的hg status
作为输入,无法正常处理换行符,因为hg status
打印换行符分隔的输出
答案 1 :(得分:0)
你缺少xargs
,它接受输入并将其作为参数提供给命令(现在你实际上是将它们发送到rm
的标准输入,这没有意义)。类似的东西:
hg status | grep '^?' | cut -d' ' -f2 | xargs rm -f
注意:如果文件名包含空格,则无效。它仍然是可能的,但你需要更聪明。