我正在尝试在一堆文件夹上运行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
时它工作正常。怎么了?有什么想法吗?
答案 0 :(得分:2)
在子shell中执行cd
及后续操作,以便主进程保留在相应的目录中。
... | while read line; do ( cd $line && git pull ); done
答案 1 :(得分: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
尝试一下,它应该工作=)