2008-12-15 128 views
15

我正在查找命令行以从Windows上的ClearCase视图中删除所有视图 - 私有文件和目录。我也有Cygwin。删除所有ClearCase视图 - 私有文件的命令行

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

+0

刚刚添加了一个更通用的命令行。如果您有任何问题,我会在明天早上回顾您的意见/问题。 – VonC 2008-12-15 22:47:14

回答

3

我一直使用:

ct lsprivate | xargs rm 
+1

我也是这样,我需要运行'ct lsco -cvi -s -avo'来找到任何签出的文件,并在取消私人文件之前取消这些签出。 – 2008-12-28 16:56:10

+1

有没有想过为什么一个4岁的职位会突然吸引downvote而没有解释为什么它被低估?我做。 – 2012-06-08 15:12:34

+0

在这种情况下,它确实让我感到困惑,幸运的是,当它发生的时候相当罕见。它也很刺激,但我认为没有什么值得我对不明原因的驾驶型选票进行反对,除非有人以我的投票为目标(这还没有发生)。 – 2012-06-08 15:22:45

1

我结束了在Cygwin中使用这个命令:

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

战略经济对话是必要cleartool更改Windows风格的路径输出到Unix的风格的路径。那里可能有更高效的命令。这一个会抛出很多错误,因为它会删除目录,然后rm找不到该目录下的任何先前找到的视图 - 私有文件。但最终你会得到正确的结果。

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

0

关于使用cygpath命令,而不是sed的什么原理?
你可以在这里找到更多关于cygpath.exe:
link text

的方式与其他程序链接cygpath.exe是使用xargs的。
例如:processA | xargs的cygpath -u>我的路径功能于UNIX的format.txt

21

一个几句话:

  • 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"

,列出所有的Y我们的私有文件(以绝对Windows方式(不需要外部的shell依赖关系)跳过被劫持/重叠/检出或非私有文件以及符号链接)。
替换@echo "%i"del /F "%i"他们走了。
请注意%i周围的双引号,以正确显示/删除名称中包含空格的文件。 还要注意缺少cleartool参数-nxn,因为符号链接否则会无法区分,并且无论如何都不会装饰视图 - 私有文件。

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

4

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

ct lspriv | grep -v checkedout | xargs rm -rf 
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的错误 - 除了我真正使用的十几个可访问的VOB之外,我的环境中有超过100个可见但不可访问的VOB。

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

还有一点需要注意 - 您希望确保您在自动松动之前完成了手动清理。例如,应该没有结帐。或者,如果有任何结账,写脚本拒绝放弃视图。

0

在纯粹的Windows,你可以这样做:

for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i" 
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. 从下面COMAND执行的CLI视图删除查看私人文件

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

5

在windows下DOS“与项目同步”提示:

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