如何检出所有修改过的文件?

时间:2019-01-20 13:16:19

标签: git awk

我正在尝试从我的仓库中检出所有修改过的文件:

git status | grep modified | awk '{split($0,a,":"); print a[2]}'

给我文件名,即git status返回的位置:

modified:    a.txt
modified:    b.txt

awk返回(注意空白):

    a.txt
    b.txt

我尝试将print替换为git checkout

git status | grep modified | awk '{split($0,a,":"); git checkout a[2]}'

但这没用。

然后我认为它可能与空白相连,所以我用

将其删除了
git status | grep modified | awk '{split($0,a,":"); gsub(" ","",a[2]); git checkout a[2]}'

哪个,当我与print而不是git checkout一起使用时,我看到的是按我的意愿打印没有任何空格的文件名。

但是,这也行不通,并且没有任何警告。我认为这可能是由于 awk 不调用命令而只是编辑文本,所以我尝试在之前添加evil,但无济于事...

我该如何做?

1 个答案:

答案 0 :(得分:2)

能否请您尝试一次(我从代码中删除了grep部分,因为awk本身可以搜索文本)。我无法测试它,因为我的系统中没有git:)

git status | awk '/modified/{split($0,a,":"); print "git checkout " a[2] > ("script.ksh")} END{close("script.ksh");system("chmod 755 script.ksh;./script.ksh")}' 

说明: :在awk代码中,只需创建一个脚本文件(仅适用于其中仅包含字符串modified的那些行。脚本文件名称将为{.1sh}的script.ksh),然后通过提供适当的执行权限来执行它。我们可以看到awk使用了man awk的{​​{1}}函数,这有助于system在程序中运行BASH级别的命令。还应该完成awk的一点。为了避免由于awk程序仍在运行而使OP出现close("script.ksh")之类的错误,因此将在后端打开文件,然后关闭文件,然后将其用于运行。

编辑: :以上解决方案使用脚本文件来运行所有git语句,以防万一您不创建文件就运行它们,然后尝试执行以下操作。

file is busy....etc