1

我正在尝试git pull在一堆文件夹上运行。这是我到目前为止得到的:

find . -type d -name .git \
| xargs -n 1 dirname \
| while read line; do cd $line && git pull; done

问题是这cd不起作用我收到一堆错误:

sh: cd: ./project_one: No such file or directory
sh: cd: ./project_two: No such file or directory
...

但是当我这样做时,cd ./project_one它工作正常。怎么了?有任何想法吗?

4

2 回答 2

2

在子 shell 中执行cd后续操作,以便主进程保留在适当的目录中。

... | while read line; do ( cd $line && git pull ); done
于 2012-11-07T06:25:44.547 回答
1

看起来像是指定相对文件路径与绝对文件路径的问题。.将脚本的“ find . type -d -name .git ...”部分更改为$(pwd),目录名称应作为绝对路径传递给 while 循环:

find $(pwd) -type d -name .git \
| xargs -n 1 dirname \
| while read line; do cd $line && git pull; done

试试看,它应该可以工作=)

于 2012-11-07T06:13:39.833 回答