2010-04-30 17 views
0

J'écris un script shell (que je crains) et j'ai besoin d'aide. C'est un script qui déplace les choses de git à CVS (pas important). La chose est, je un chemin de fichier:script shell amusant! comment effectuer une action sur chaque sous-répertoire à partir d'un chemin donné?

controllers/listbuilder/setup/SubmissionRolesListbuilderHandler.inc.php 

et je dois pouvoir faire:

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

que quelqu'un peut me aider? Le meilleur que j'ai trouvé jusqu'ici est d'ajouter récursivement TOUS les fichiers dans mon arbre de travail, mais cela semble trop inefficace.

EDIT: On m'a demandé des éclaircissements. Ici va: Je veux pouvoir CVS ADD fichiers, compte tenu d'une liste de chemins de fichiers, et en quelque sorte gérer l'ajout de nouveaux dossiers lorsque cela est nécessaire.

+0

Vous déménagez de git à CVS? Je pense que vous êtes perdu;) –

+0

je n'ai pas clarifié. J'ai migré vers git, mais j'ai besoin de maintenir une copie de CVS à jour pour diverses raisons. git cvsimport ne le faisait pas non plus pour moi. – pocketfullofcheese

Répondre

1

Ajouter tous les répertoires:

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

Ajouter tous les fichiers:

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

Je ne sais pas ce que vous voulez vraiment atteindre.

+0

no. vous verrez que j'ai déjà découvert cette solution. Je veux quelque chose qui ne fera que l'ajout de cvs sur le répertoire lié à mon fichier modifié. Mon arbre de travail est très grand et cela serait inefficace. – pocketfullofcheese

+0

Vous devriez décrire plus clairement ce que vous voulez accomplir. –

0

C'est un peu Kluge-ish, et échouera sans doute si vous donnez un look sale, mais:

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 

Ce script est plus d'une idée qu'une solution complète. Par exemple, si vous avez besoin du chemin relatif complet (pas seulement le nom du répertoire), vous pouvez compter le nombre de barres obliques, en utilisant cut -d/ -f1-$i.