Сценарий оболочки весело! Как выполнить действие в каждом подкаталоге по заданному пути? - PullRequest
0 голосов
/ 30 апреля 2010

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

1 голос
/ 30 апреля 2010

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

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

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

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

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

0 голосов
/ 07 мая 2010

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

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...