shell脚本好玩!如何从给定路径对每个子目录执行操作?

时间:2010-04-30 00:48:09

标签: path shell cvs dirname

我正在写一个shell脚本(我很讨厌),我需要一些帮助。它是一个将东西从git转移到CVS(不重要)的脚本。问题是,我是一个文件路径:

controllers/listbuilder/setup/SubmissionRolesListbuilderHandler.inc.php

我需要能够做到:

cvs add controllers;
cvs add controllers/listbuilder;
cvs add controllers/listbuilder/setup;
cvs add controllers/listbuilder/setup/SubmissionRolesListbuilderHandler.inc.php

有人可以帮帮我吗?到目前为止,我提出的最好的方法是以递归方式在工作树中添加所有文件,但这似乎效率过低。

编辑:我被要求澄清。这里:我希望能够提供CVS ADD文件,给定文件路径列表,并在必要时以某种方式处理新文件夹的添加。

2 个答案:

答案 0 :(得分:1)

添加所有目录:

find . -type d -exec cvs add {} \;

添加所有文件:

find . -type f -exec cvs add {} \;

我不确定你真正想要达到的目标。

答案 1 :(得分:0)

这有点像kluge-ish,如果你给它一个脏看,毫无疑问会失败,但是:

mkdir a/b/c/d

remain="a/b/c/d/"
while echo "$remain" | grep -q / ; do
    dir="$(echo "$remain" | cut -d/ -f1)"
    remain="$(echo "$remain" | cut -d/ -f2-)"

    echo "Do something with dir $dir"
done

这个脚本不仅仅是一个完整的解决方案。例如,如果您需要完整的相对路径(不仅仅是dir名称),则可以使用cut -d/ -f1-$i计算斜杠数。