2010-04-30 1 views
0

Я пишу сценарий оболочки (который я сосать), и мне нужна помощь. Его сценарий, который перемещает вещи из 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 

Может кто-нибудь помочь мне? Самое лучшее, что я придумал до сих пор, - это рекурсивно добавить ВСЕ файлы в мое рабочее дерево, но это кажется слишком неэффективным.

EDIT: Мне было предложено уточнить. Вот так: я хочу иметь файлы CVS ADD, учитывая список путей к файлам и как-то обрабатывать добавление новых папок, когда это необходимо.

+0

Вы переходите от git к CVS? Я думаю, вы потеряны;) –

+0

Я не уточнил. Я перешел на git, но мне нужно постоянно обновлять CVS по различным причинам. git cvsimport тоже не делал этого для меня. – pocketfullofcheese

ответ

1

Добавить все каталоги:

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

Добавить все файлы:

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

Я не уверен, что вы действительно хотите достичь.

+0

№. вы увидите, что я уже нашел это решение. Я хочу что-то, что будет делать только cvs add в каталоге, связанном с моим измененным файлом. Мое рабочее дерево очень велико, и это будет неэффективно. – pocketfullofcheese

+0

Вам следует более четко описать, чего вы хотите достичь. –

0

Это несколько Клюги-иш, и, несомненно, будет ошибка, если вы даете ему грязный вид, но:

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.