2008-12-15 18 views
15

Je recherche une ligne de commande pour supprimer tous les fichiers et répertoires view-private d'une vue ClearCase sous Windows. J'ai Cygwin disponible aussi.Ligne de commande pour supprimer tous les fichiers private view ClearCase

Le script disponible à this article n'est pas tout à fait ce que je veux, puisque je travaille avec un grand nombre de fichiers et que je veux tous les supprimer sans avoir à les sélectionner.

+0

Juste ajouté une ligne de commande plus générique. Je passerai en revue votre commentaire/question demain matin si vous en avez. – VonC

Répondre

3

J'ai toujours utilisé:

ct lsprivate | xargs rm 
+1

Moi aussi, avec la mise en garde que je lance 'ct lsco -cvi -s -avo' pour trouver d'abord les fichiers extraits et j'annule ces extractions avant de supprimer les fichiers privés. –

+1

Vous êtes-vous déjà demandé pourquoi un post de 4 ans attirait soudainement une downvote sans explication de la raison pour laquelle il était downvoté? Je fais. –

+0

Cela me surprend dans ces occasions, heureusement assez rares, quand ça arrive. Ça irrite aussi, mais j'ai décidé qu'il n'y avait rien de valable que je puisse faire à propos des votes par correspondance inexpliqués, à moins qu'il y ait quelqu'un sur une frénésie de votation qui me vise (ce qui n'est pas encore arrivé). –

1

Je fini par utiliser cette commande dans Cygwin:

cleartool ls -recurse -view_only | sed -e 's:\\:/:g' | xargs rm -r 

Sed est nécessaire de changer la sortie des chemins de style Windows en cleartool dans Unix- chemins de style. Il y a probablement une commande plus efficace là-bas. Celui-ci jette beaucoup d'erreurs, car il supprime le répertoire, et alors tous les fichiers view-private précédemment trouvés sous ce répertoire ne seront pas trouvés par rm. Mais vous obtenez le bon résultat à la fin.

EDIT: VonC souligne que cela ne fonctionne que avec des vues dynamiques ClearCase

0

ce que sur l'utilisation de la commande de cygpath au lieu de sed?
vous trouvé plus d'informations sur cygpath.exe ici:
link text

un moyen de lier cygpath.exe avec d'autres programmes est d'utiliser xargs.
exemple: processA | xargs cygpath -u> my-chemin en unix-format.txt

+0

Je ne pouvais pas trouver la bonne façon de chaîne qui avec les autres commandes. Si vous pouvez le proposer, veuillez éditer votre réponse pour montrer cela; J'espère que cela aidera quelqu'un d'autre. – mbyrne215

21

Quelques remarques:

  • ct lsprivate est idéal pour des vues dynamiques, pas vues instantané
  • ct ls -rec -view_only ainsi que ct lsprivate aussi la liste vos fichiers empruntés ... Je ne suis pas sûr que vous voulez les supprimer ...

Pour la liste des fichiers privés (seulement privés, pas détournés que vous voudrez peut-être garder), vous devez avoir un commande que:

  • prend en espaces de compte dans le nom
  • ne répertorie pas checkouts ou pris en otage ou éclipsée des fichiers ou des liens symboliques
  • fonctionne à la fois instantané et vues dynamiques
  • (bonus) ne dépend pas de commandes shell externe

    for /F "usebackq delims=" %i in (`cleartool ls -r ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed" ^| find /V "-->"`) do @echo "%i"

répertoriant tous y nos fichiers privés (ignorer les liens piratés/éclipsés/extraits ou non privés ainsi que les liens symboliques) d'une manière purement Windows (aucune dépendance de shell externe n'est nécessaire).
Remplacez @echo "%i" par del /F "%i" et ils sont partis.
Notez les guillemets autour de% i, afin d'afficher/supprimer correctement les fichiers avec des espaces dans leur nom. Notez également l'absence du paramètre cleartool -nxn, car les liens symboliques seraient autrement indiscernables et les fichiers view-private ne sont pas décorés de toute façon. Pour supprimer également les répertoires privés, commencez par exécuter la commande rmdir /S /Q "%i" puis del /F "%i".

+0

Vous avez raison, mon chemin était très spécifique à mon but pour le moment. Je n'avais aucune caisse, et je voulais absolument des fichiers et des répertoires en un seul coup. Donc, un peu d'un compromis, mais générique bat probablement l'exécuter deux fois pour la plupart des utilisations. – mbyrne215

+0

@Sven: la modification semble bonne. Si vous l'avez testé, je vous remercie pour cette amélioration. – VonC

+0

Les temps suivants que j'exécute la commande, il s'exécute très lentement au point d'expirer. Avez-vous une idée de pourquoi cela pourrait être? – TDN

4

Je sais qu'il ya probablement une meilleure façon, mais il me semble toujours revenir à celui-ci:

ct lspriv | grep -v checkedout | xargs rm -rf 
2

Sur Unix (vues dynamiques), une technique très efficace pour éliminer les visualiser des fichiers privés est de laisser tomber la vue. Préservez le cspec en premier. Assurez-vous également qu'il n'y a pas de check-out dans la vue. Puis supprimez-le et recréez-en un nouveau (même nom, même cspec, même stockage, mais pas de fichiers privés jusqu'à ce que vous les créiez).

# With the view to be cleaned as your current view... 
ct pwv -s > /tmp/viewname 
viewname=$(</tmp/viewname) 
ct catcs > /tmp/$viewname.cs 
ct lsview -cvi | awk '{print $3;}' > /tmp/$viewname.vws 
# The next line is the first dangerous line! 
# It cancels all outstanding checkouts and removes the modified files 
ct lsco -cvi -s -avo 2>/dev/null | xargs ct unco -rm # Or: xargs ct ci -nc 
exit   # Terminate the session in the view 
viewname=$(</tmp/viewname) 
rm /tmp/viewname 
# The next line is the second dangerous line 
ct rmview -tag $viewname 
ct mkview -tag $viewname $(</tmp/$viewname.vws) 
ct setcs -tag $viewname /tmp/$viewname.cs 
rm /tmp/$viewname.cs 

Tous les fichiers privés de vue ont disparu - et vous avez réduit l'utilisation de votre disque.

Si vous avez la chance de ne travailler qu'avec un seul VOB, vous pouvez omettre l'option '-avo' (toutes les VOB). La redirection '2>/dev/null' perd les erreurs des VOB inaccessibles - j'ai plus de 100 VOBs visibles mais inaccessibles dans mon environnement, mis à part la douzaine de ceux que j'utilise vraiment. Notez que si vous empaquiez ceci comme un script 'rebuild.view', vous prendriez le nom d'affichage comme argument (travaillant depuis l'extérieur de la vue - ce ne serait pas la vue actuelle), et vous pourriez ensuite faire le nettoyage à l'intérieur de la vue, utilisez une autre option 'lsview' pour obtenir les détails nécessaires, et généralement vous éloignez du stockage temporaire dans/tmp (bien que vous ayez besoin de mettre le cspec en cache quelque part). Un autre point à noter - vous voudrez vous assurer que vous avez fait un nettoyage manuel avant de laisser l'automatique lâche. Il ne devrait pas y avoir de caisse, par exemple. Sinon, écrivez le script pour refuser de laisser tomber la vue s'il y a des extractions.

0

Dans les fenêtres pures, vous pouvez le faire:

for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i" 
1
  1. De la CLI Pour afficher la vue des fichiers privés exécutant la commande ci-dessous

    for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do @echo "%i" 
    
  2. De la CLI exécutée ci-dessous COMAND à supprimer la vue Fichiers privés

    for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do del /F "%i" 
    
  3. Synchroniser la vue avec le projet:
    De l'explorateur de projet sélectionner les propriétés de flux, accédez à l'onglet Affichage, sélectionnez les propriétés d'affichage puis cliquez sur le « synchroniser avec le projet »

5

Sous windows DOS prompt:

for /f "delims=" %f in ('cleartool lspriv -s -do -oth ^| sort /r') do @del /f /q "%f"