2008-12-15 11 views
15

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.Línea de comando para eliminar todos los archivos view-private de ClearCase

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

+0

Acaba de agregar una línea de comando más genérica. Voy a revisar tu comentario/pregunta mañana por la mañana si tienes alguno. – VonC

Respuesta

3

Siempre he usado:

ct lsprivate | xargs rm 
+1

Yo también, con la advertencia de que ejecuto 'ct lsco -cvi -s -avo' para buscar primero los archivos extraídos y los cancelo antes de eliminar los archivos privados. –

+1

¿Alguna vez se preguntó por qué una publicación de 4 años de repente atraería un voto negativo sin explicación de por qué se está bajando la votación? Hago. –

+0

Me sorprende en esas ocasiones, afortunadamente bastante raro, cuando sucede. También irrita, pero decidí que no había nada que valiera la pena que pudiera hacer sobre los inexplicables votos a la baja, a menos que haya alguien en una ronda de votación negativa dirigida a mí (lo que tampoco ha sucedido todavía). –

1

Terminé usando este comando en Cygwin:

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

La Sed es necesario cambiar la salida de caminos de estilo de Windows cleartool en Unix caminos de estilo. 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.

EDIT: VonC señala que esto sólo funciona con vistas dinámicas de ClearCase

0

¿qué pasa con la utilización de mando cygpath en lugar de sed?
que se puede encontrar más información sobre cygpath.exe aquí:
link text

una forma de vincular cygpath.exe con otros programas es usar xargs.
ejemplo: procesoA | xargs cygpath -u> mi-path-en-unix-format.txt

+0

No pude encontrar el camino correcto para cadena que junto con los otros comandos. Si puede encontrarlo, edite su respuesta para mostrar eso; con suerte, ayudará a alguien más. – mbyrne215

21

Algunas observaciones:

  • ct lsprivate es ideal para las vistas dinámicas, no instantáneas de vistas
  • ct ls -rec -view_only, así como también la lista ct lsprivate sus archivos desprotegidos ... No estoy seguro de que quiera eliminarlos ...

Para listar archivos privados (solo privados, no secuestrados que desee conservar), necesita tener un comando que:

  • tiene en espacios cuenta a nombre
  • no enumera las cajas o secuestrado o archivos o enlaces simbólicos
  • funciona tanto para instantáneas y vistas dinámicas eclipsado
  • (bono) no depende de la cáscara externa comandos

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

que enumera todos y nuestros archivos privados (omitiendo 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 se han ido.
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 de lo contrario los enlaces simbólicos no se distinguirían y los archivos view-private no se decorarán de todos modos.

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

+0

Tienes razón, mi manera era muy específica para mi propósito en este momento. No tenía ningún pago, y definitivamente quería archivos y directorios en una sola toma. Por lo tanto, un poco de una compensación, pero genérico probablemente sea mejor ejecutarlo dos veces para la mayoría de los usos. – mbyrne215

+0

@Sven: la edición se ve bien. Si lo ha probado, le agradezco esta mejora. – VonC

+0

Las siguientes veces que ejecuto el comando, se ejecuta muy lento hasta el punto de agotarse el tiempo. ¿Tienes alguna idea de por qué podría ser? – TDN

4

sé que es probable que haya una mejor manera, pero siempre parecen venir de nuevo a éste:

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

En Unix (vistas dinámicas), una técnica muy eficaz para eliminar archivos privados vista es dejar caer 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) 
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 

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

Si tiene la suerte de trabajar solo con un solo VOB, puede omitir la opción '-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 secuencia 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 de la vista, use una opción diferente 'lsview' para obtener los detalles necesarios y, en general, evite el almacenamiento temporal en/tmp (aunque deberá almacenar en caché el cspec en algún lugar).

Otro punto a tener en cuenta: deseará asegurarse de haber realizado una limpieza manual antes de soltar la herramienta. 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.

0

En las ventanas puros se puede hacer esto:

for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i" 
1
  1. desde la CLI Para listar la vista de los archivos privados ejecutan el comando a continuación

    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 por debajo de COMAND 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. Sincronización de la vista con el proyecto:
    Desde el Explorador de proyectos, seleccione Propiedades de ruta, vaya a la pestaña Ver, seleccione las propiedades de la vista a continuación, haga clic en el "sincronizar con el proyecto"

5

bajo Windows DOS prompt:

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