Ligne de commande pour supprimer tous les fichiers ClearCase view-private

je cherche une ligne de commande pour supprimer tous les fichiers et répertoires de view-private d'une vue ClearCase sur Windows. J'ai Cygwin.

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

15
demandé sur mbyrne215 2008-12-16 00:04:36

9 réponses

quelques remarques:

  • ct lsprivate est idéal pour les vues dynamiques, pas les vues instantanées
  • ct ls -rec -view_only ainsi que ct lsprivate dressez également la liste de vos dossiers vérifiés... Je ne suis pas sûr que vous voulez supprimer...

pour lister les fichiers privés (seulement les privés, pas les détournés que vous pouvez garder), vous devez avoir une commande qui:

  • prend en compte les espaces dans le nom
  • n'énumère pas les checkouts ou détournés ou fichiers ou liens symboliques éclipsés
  • fonctionne pour les vues à la fois instantanées et dynamiques
  • (bonus) ne dépend pas de commandes shell externes

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

qui répertorie tous vos fichiers privés (sautant les fichiers détournés/éclipsés/cochés ou non privés ainsi que les liens symboliques) d'une manière Windows pure (aucune dépendance externe de l'interpréteur de commandes nécessaire).

Remplacez @echo "%i" par del /F "%i" et ils sont partis.

Remarque l' des 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 impossibles à distinguer et les fichiers view-private ne sont pas décorés de toute façon.

pour se débarrasser aussi des répertoires privés, Lancez d'abord la commande avec rmdir /S /Q "%i" et del /F "%i".

22
répondu VonC 2012-09-13 11:53:11

sous Windows DOS prompt:

for /f "delims=" %f in ('cleartool lspriv -s -do -oth ^| sort /r') do @del /f /q "%f"
6
répondu Rajinikanth 2012-08-23 10:26:59

je sais qu'il y a probablement un meilleur moyen mais je semble toujours revenir à celui-ci:

ct lspriv | grep -v checkedout | xargs rm -rf
5
répondu Mr. Muskrat 2008-12-16 21:16:53

j'ai toujours utilisé:

ct lsprivate  | xargs rm
3
répondu Paul Tomblin 2008-12-15 21:06:13

sur Unix (vues dynamiques), une technique très efficace pour supprimer les fichiers privés de vue est de supprimer la vue. Préserver le cspec d'abord. Aussi assurez-vous il n'y a pas extractions dans la vue. Puis retirez - le et recréez un nouveau (même nom, même cspec, même stockage, mais pas de fichiers privés jusqu'à ce que vous les Créez).

# 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 ;}' > /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 sont partis - et vous avez minimisé votre utilisation de disque.

si vous avez la chance de travailler avec un seul VOB, vous pouvez omettre le '-avo' (tous les emplois) option. Le '

notez que si vous empaquetez ceci comme un'rebuild.view 'script, vous prendriez le viewname comme argument (travaillant depuis l'extérieur de la vue - ce ne serait pas la vue courante), et vous pourriez alors faire le nettoyage à l'intérieur de la vue, utiliser un autre 'lsview' option pour obtenir les détails nécessaires, et généralement s'éloigner du stockage temporaire dans /tmp (bien que vous aurez besoin de mettre en cache le cspec quelque part).

Un autre point à noter - vous voulez vous assurer que vous avez fait un nettoyage manuel avant de laisser l'automatique lâche. Il ne devrait pas être extractions, par exemple. Alternativement, écrivez le script pour refuser de laisser tomber la vue s'il y a des checkouts.

2
répondu Jonathan Leffler 2008-12-28 17:30:55

j'ai fini par utiliser cette commande dans Cygwin:

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

Le sed est nécessaire pour changer la sortie Windows-style paths par cleartool en Unix-style paths. Il y a probablement un commandement plus efficace là-bas. Celui-ci jette beaucoup d'erreurs, parce qu'il supprime le répertoire, et puis tous les fichiers privés de vue 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 fait remarquer que ceci fonctionne uniquement avec des vues dynamiques de ClearCase

1
répondu mbyrne215 2008-12-15 22:58:17
  1. depuis le CLI pour lister les fichiers privés de vue exécutés 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. à partir du CLI exécuté sous comand pour supprimer la vue des 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. Synchronisation de la vue avec le projet:

    Dans l'Explorateur de projet, sélectionnez les propriétés du flux, allez dans l'onglet Vue, sélectionnez les propriétés de la vue, puis cliquez sur "Synchroniser avec le projet"

1
répondu Vas 2011-12-09 16:59:50

qu'en est-il de l'utilisation de la commande de cygpath au lieu de sed?

vous pouvez trouver plus d'informations sur cygpath.exe ici:

texte du lien

un moyen de relier cygpath.exe avec d'autres programmes est d'utiliser xargs.

exemple: processA | xargs cygpath -u > mon-chemin-de-unix-format.txt

0
répondu 2008-12-16 10:50:23

Dans le plus pur windows, vous pouvez faire ceci:

for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i"
0
répondu Sam Mackrill 2011-02-11 15:59:33