用于删除所有ClearCase视图专用文件的命令行

时间:2008-12-15 21:04:37

标签: bash cygwin clearcase

我正在寻找一个命令行来从Windows上的ClearCase视图中删除所有视图专用文件和目录。我也有Cygwin。

this article提供的脚本不是我想要的,因为我正在处理大量文件,并希望将它们全部删除而不必选择每个文件。

9 个答案:

答案 0 :(得分:22)

一些评论:

  • ct lsprivate非常适合动态视图,而非快照视图
  • ct ls -rec -view_only以及ct lsprivate也会列出您签出的文件...我不确定您是否要删除这些文件...

为了列出私人文件(只有私人文件,而不是你可能想要保留的私人文件),你需要有一个命令:

  • 考虑名称中的空格
  • 未列出结帐或劫持或黯然失色的文件或符号链接
  • 适用于快照和动态视图
  • (奖金)不依赖于外部shell命令

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

以纯Windows方式列出所有私有文件(跳过被劫持/重叠/签出或非私有文件以及符号链接)(不需要外部shell依赖)。
@echo "%i"替换为del /F "%i",它们就会消失 请注意%i周围的双引号,以便正确显示/删除名称中包含空格的文件。 另请注意,缺少cleartool参数-nxn,因为符号链接无法区分,并且无论如何都不会对视图专用文件进行装饰。

为了摆脱私人目录,首先使用rmdir /S /Q "%i"然后使用del /F "%i"运行命令。

答案 1 :(得分:6)

在Windows DOS提示符下:

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

答案 2 :(得分:5)

我知道可能有更好的方法,但我似乎总是回到这个方面:

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

答案 3 :(得分:3)

我一直用:

ct lsprivate  | xargs rm

答案 4 :(得分:2)

在Unix(动态视图)上,删除视图专用文件的一种非常有效的方法是删除视图。首先保留cspec。还要确保视图中没有签出。然后删除它并重新创建一个新的(同名,相同的cspec,相同的存储,但在创建它们之前没有私有文件)。

# 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

所有查看专用文件都已消失 - 您已将磁盘使用量降至最低。

如果您足够幸运只能使用单个VOB,则可以省略“-avo”(所有VOB)选项。 '2>/dev/null'重定向失去了无法访问的VOB的错误 - 我的环境中有超过100个可见但无法访问的VOB,除了我真正使用的十几个可访问的VOB。

请注意,如果您将其打包为“rebuild.view”脚本,则将视图名称作为参数(在视图外部工作 - 它不是当前视图),然后您可以在视图中进行清理,使用不同的'lsview'选项获取所需的详细信息,并且通常远离/ tmp中的临时存储(尽管您需要在某处缓存cspec)。

还有一点需要注意 - 您需要确保在自动松开之前已经完成了手动清理。例如,不应该有结帐。或者,编写脚本以拒绝在有任何签出时删除视图。

答案 5 :(得分:1)

我最终在Cygwin中使用了这个命令:

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

sed是将cleartool输出的Windows样式路径更改为Unix样式路径所必需的。那里的命令可能更有效率。这个会抛出很多错误,因为它删除了目录,然后rm找不到该目录下面任何以前找到的视图私有文件。但是你最终得到了正确的结果。

编辑:VonC指出这只适用于动态ClearCase视图

答案 6 :(得分:1)

  1. 从CLI列出执行以下命令的视图私有文件

    for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do @echo "%i"
    
  2. 从以下命令执行的CLI中删除视图私有文件

    for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do del /F "%i"
    
  3. 将视图与项目同步:
    从项目资源管理器中选择流属性,转到视图选项卡,选择视图属性,然后单击“与项目同步”

答案 7 :(得分:0)

如何使用cygpath命令而不是sed?
你可以在这里找到更多关于cygpath.exe的信息:
link text

将cygpath.exe与其他程序链接的方法是使用xargs 例如:processA | xargs cygpath -u&gt;我的 - 路径 - 在-UNIX的format.txt

答案 8 :(得分:0)

在纯窗口中,你可以这样做:

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