使用awk tarball指定的文件

时间:2012-03-06 03:15:00

标签: awk

我有repo status的以下输出:

project X/Y                  (*** NO BRANCH ***)
 --     A/B/c
 -m     D/E/f
project Z/                   (*** NO BRANCH ***)
 --     G/H/i
 -m     J/K/l

(小写字母是文件,大写是dirs)

前缀为--的行表示新添加的文件。 repo diff不包含这些文件,因此我无法创建包含所有差异的修补程序。所以,我只是创建它们的tarball。

问:我可以使用哪些脚本(例如awkperlpython)来创建这些文件的tarball? tarball应该包含:

X/Y/A/B/c
Z/G/H/i


我认为awk脚本会是这样的(我不熟悉w /语法):

awk {
    BEGIN curdir = '', filelist = []
    { 
        if ($0 == "project") {
            curdir = $1

        } else if ($0 == "--") {
            # insert file specified by $1 into tarball
        }
    }
}

想法?谢谢!

1 个答案:

答案 0 :(得分:2)

你很亲密。这是一些建议:

/^project/ {
    dir = $2
}

$1 == "--" {
    fullpath = dir $2 # space between dir and $2 means concatenation
    print fullpath
    # Do something with fullpath such as 
    # system("tar ...")
}

讨论

  • $ 1是一行中的第一个字段(标记),$ 2是第二个字段,依此类推
  • $ 0代表整个记录(行)
  • 每当我们看到以项目开头的行时,我们将目录$ 2保存到变量 dir
  • 每当我们看到“ - ”的第一个字段时,我们就会打印出与文件名连在一起的目录。在您的情况下,插入命令以存档文件。