在Win MSYS上的Unix`find`,没有这样的文件或目录

时间:2012-11-07 05:52:54

标签: bash find sh

我正在尝试在一堆文件夹上运行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时它工作正常。怎么了?有什么想法吗?

2 个答案:

答案 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

尝试一下,它应该工作=)