bash - por - Línea de comando para eliminar todos los archivos view-private de ClearCase
crear archivo en linux (9)
¿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 programas es usar xargs.
ejemplo: procesoA | xargs cygpath -u> my-path-in-unix-format.txt
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.
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
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
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)
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 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.
En ventanas puras puedes hacer esto:
for /F "delims=" %i IN (''ct lsprivate'') DO rm -rf "%i"
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"
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"
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"
En el indicador de Windows DOS:
for /f "delims=" %f in (''cleartool lspriv -s -do -oth ^| sort /r'') do @del /f /q "%f"
Algunas observaciones:
-
ct lsprivate
es ideal para vistas dinámicas, no para vistas instantáneas -
ct ls -rec -view_only
así comoct 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"
.