2009-10-23 4 views
1

Mon script bash est faible. Je veux créer un script qui filtre et ajoute des fichiers au svn.script pour ajouter des fichiers à SVN avec des filtres

i ont jusqu'à présent cette

ls | egrep -v "(\.tab\.|\.yy\.|\.o$|\.exe$|~$)" 

J'ai essayé de le sortir en utilisant exec mais couldnt comprendre comment. Avant cela, j'ai vérifié si svn add utilise regex. Je ne suis pas sûr si cela et je ne pourrais pas comprendre comment inverser le dessus sans le -v (j'ai fatigué "[^((\.tab\.|\.yy\.|\.o$|\.exe$|~$))]" mais cela n'a pas fonctionné comme prévu (il semble ignorer seulement les fichiers .tab.))

Comment puis-je créer un script pour ajouter des fichiers à svn après avoir appliqué un filtre? Serait-ce le moyen le plus simple? -> utiliser ls, grep, mettre dans un tableau bash puis utiliser un foreach avec un svn add $ element?

NOTE: Ceci est en utilisant Linux, je ne pense pas que je vais avoir cette course sur Windows (je ne pourrais pas mettre en place bison) tant que cela fonctionne sur la plupart des distributions Linux je suis heureux. Ignorer le fait que ce qui précède utilise .exe

Répondre

2

Un certain nombre de façons:

  1. Utilisez: svn add `accents graves` ls | trucs egrep

  2. Utilisez xargs: ls | egrep stuff | xargs svn add

  3. utilisation trouver et xargs: find . -type f -name *.c -print | grep -v '\.svn' | xargs svn add

De toute évidence, le changement "substance" et le "-name * .c" pour répondre à vos besoins. Une autre solution à ceci est d'ajouter ces extensions de fichier et le dossier .svn à votre modèle ignorer SVN.

+0

xargs dans la deuxième méthode semble s'étouffer sur la sortie délimitée par le saut de ligne de ls. Au moins sur ma machine (Ubuntu 12.04). –

1

Essayez d'utiliser find.

find <pattern> -prune .svn -exec svn add {} \;

La commande exec suivante sera exécutée pour chaque fichier et {} sera remplacé par le nom du fichier à chaque itération. Je ne suis pas en face de mon système Linux, donc je ne peux pas vous obtenir un modèle dont vous avez besoin en ce moment, mais si vous lisez l'homme, vous pourriez y arriver.

+0

Si vous (ou n'importe qui) pouvez me dire comment ignorer mon dossier .svn ce serait la bonne réponse. –

+0

N'avez pas testé ce qui précède mais pour ignorer le dossier .svn, vous utiliserez le commutateur -prune suivant (ou peut-être avant) votre modèle. – antik

1

Armé d'un client configuré comme tel, vous pouvez alors faire svn add * et obtenir seulement ce que vous voulez dans SVN.

Questions connexes