Línea de comando para eliminar todos los archivos view-private de ClearCase

Estoy buscando una línea de comando para eliminar todos los archivos y directorios view-private desde una vista de ClearCase en Windows. También tengo Cygwin disponible.

La secuencia de comandos disponible en este artículo no es exactamente lo que quiero, ya que estoy trabajando con una gran cantidad de archivos y quiero eliminarlos todos sin tener que seleccionarlos.

Algunas observaciones:

  • ct lsprivate es ideal para vistas dinámicas, no para vistas instantáneas
  • ct ls -rec -view_only así como ct lsprivate también listan sus archivos desprotegidos … No estoy seguro de que quiera eliminar esos …

Para enumerar archivos privados (solo privados, no pirateados, es posible que desee conservarlos), debe tener un comando que:

  • toma en cuenta los espacios en el nombre
  • no lista las cajas o archivos secuestrados o eclipsados ​​o enlaces simbólicos
  • funciona tanto para instantáneas como dinámicas
  • (bonus) no depende de comandos de shell externos

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

Eso enumera todos sus archivos privados (saltándose los secuestrados / eclipsados ​​/ desprotegidos o no privados, así como los enlaces simbólicos) en una forma pura de Windows (no se necesita una dependencia de shell externa).
Reemplace @echo "%i" por del /F "%i" y desaparecen.
Tenga en cuenta las comillas dobles alrededor de% i, para mostrar / eliminar correctamente los archivos con espacios en su nombre. También tenga en cuenta la ausencia del parámetro cleartool -nxn, ya que los enlaces simbólicos de otra manera serían indistinguibles y los archivos view-private no se decorarán de todos modos.

Para deshacerse también de directorios privados, primero ejecute el comando con rmdir /S /Q "%i" y luego con del /F "%i" .

En el indicador de Windows DOS:

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

Sé que probablemente haya una mejor manera, pero siempre vuelvo a este:

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

Siempre he usado:

 ct lsprivate | xargs rm 

En Unix (vistas dinámicas), una técnica muy efectiva para eliminar ver archivos privados es abandonar la vista. Preserva el cspec primero. También asegúrese de que no haya pagos en la vista. Luego quítelo y vuelva a crear uno nuevo (mismo nombre, la misma especificación, el mismo almacenamiento, pero no archivos privados hasta que los cree).

 # With the view to be cleaned as your current view... ct pwv -s > /tmp/viewname viewname=$( /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=$( 

Todos los archivos privados de la vista se han ido, y ha minimizado el uso del disco.

Si tiene la suerte de trabajar solo con un solo VOB, puede omitir la -avo ' -avo ' (todos los VOB). La redirección ' 2>/dev/null ' pierde los errores de las VOB inaccesibles: tengo más de 100 VOB visibles pero inaccesibles en mi entorno, aparte de la docena más o menos accesibles que realmente uso.

Tenga en cuenta que si estuviera empaquetando esto como una rebuild.view de comandos ' rebuild.view ', tomaría el nombre de vista como argumento (trabajando desde fuera de la vista, no sería la vista actual), y luego podría hacer la limpieza dentro del ver, use una opción diferente 'lsview' para obtener los detalles necesarios, y generalmente alejarse del almacenamiento temporal en / tmp (aunque deberá almacenar en caché el cspec en algún lugar).

Otro punto a tener en cuenta es que querrá asegurarse de haber realizado una limpieza manual antes de dejar que se suelte la automática. No debería haber cajas, por ejemplo. Alternativamente, escriba la secuencia de comandos para rechazar la caída de la vista si hay algún pago.

Terminé usando este comando en Cygwin:

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

El sed es necesario para cambiar las rutas de estilo de Windows producidas por cleartool en rutas de estilo Unix. Probablemente haya un comando más eficiente por ahí. Éste arroja muchos errores, ya que borra el directorio y, por lo tanto, rm no encuentra ninguno de los archivos privados que se encuentran previamente debajo de ese directorio. Pero obtienes el resultado correcto al final.

EDITAR: VonC señala que esto solo funciona con vistas dinámicas de ClearCase

  1. Desde la CLI Para listar la vista, los archivos privados ejecutaron el siguiente comando

     for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do @echo "%i" 
  2. Desde la CLI ejecutada a continuación comand para eliminar la vista archivos privados

     for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do del /F "%i" 
  3. Sincronizando la vista con el proyecto:
    Desde el explorador del proyecto, seleccione las propiedades de la secuencia, vaya a la pestaña vista, seleccione las propiedades de la vista y luego haga clic en “sincronizar con el proyecto”

¿qué pasa con el uso del comando cygpath en lugar de sed?
puedes encontrar más información sobre cygpath.exe aquí:
Texto del enlace

una forma de vincular cygpath.exe con otros progtwigs es usar xargs.
ejemplo: procesoA | xargs cygpath -u> my-path-in-unix-format.txt

En ventanas puras puedes hacer esto:

 for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i"