我正在寻找一条命令行,在Windows上从ClearCase视图中删除所有视图私有的文件和目录。 我也有Cygwin可用。
这篇文章中提供的脚本并不完全符合我的要求,因为我要处理大量的文件,并且希望无需逐个选择即可全部删除。
一些说明:
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"
命令运行一次。
cmd /C
调用进行封装。cmd /C "..."
。此外,在脚本中,您需要启用延迟扩展,并使用 %%i
代替 %i
。 - VonC在 Windows 的 DOS 命令提示符下:
for /f "delims=" %f in ('cleartool lspriv -s -do -oth ^| sort /r') do @del /f /q "%f"
ct lspriv | grep -v checkedout | xargs rm -rf
我一直都使用:
ct lsprivate | xargs rm
# 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
'(所有VOBs)选项。'2>/dev/null
'重定向会丢失无法访问的VOBs的错误信息 - 在我的环境中,除了我实际使用的十几个可访问的VOB之外,还有100多个可见但不可访问的VOB。
请注意,如果您将其打包为“rebuild.view
”脚本,则会将视图名称作为参数(从视图外部工作 - 它不是当前视图),然后您可以在视图内部进行清理,使用不同的'lsview'选项获取所需的详细信息,并通常远离在/tmp中的临时存储(尽管您需要将cspec缓存到某个地方)。
另外需要注意的一点是 - 在释放自动程序之前,您需要确保已经进行了手动清理。例如,不应该存在任何签出。或者,编写脚本以拒绝删除视图,如果存在任何签出。
从CLI中列出查看私有文件,请执行以下命令:
for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do @echo "%i"
从CLI中执行以下命令以删除查看私有文件:
for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do del /F "%i"
将视图与项目同步:
从项目资源管理器中选择流属性,转到视图选项卡,选择视图属性,然后单击“与项目同步”
for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i"
最终我在Cygwin中使用了这个命令:
cleartool ls -recurse -view_only | sed -e 's:\\:/:g' | xargs rm -r
使用cygpath命令代替sed怎么样?
你可以在这里找到更多关于cygpath.exe的信息:
链接文本
将cygpath.exe与其他程序链接起来的方法是使用xargs。
例如:processA | xargs cygpath -u > my-path-in-unix-format.txt