在当前目录递归查找所有视图私有文件的命令

30

在当前目录中递归查找所有视图私有文件的清晰度命令是什么?

6个回答

35

通常使用的命令基于cleartool ls

  • ct lsprivate:但它仅适用于动态视图,而不适用于快照视图
  • ct ls -rec -view_only:至少在快照和动态视图中都有效

然而,这两个列表也列出了您已检出的文件。

如果您只想要私有文件,即跳过被劫持/遮蔽/检出和符号链接,则需要将它们筛选掉。

在Windows中,可以使用以下命令:

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

在Unix操作系统中:

cleartool ls -rec | grep -v "Rule:" | grep -v "hijacked" | grep -v "eclipsed" | grep -v "-->" | xargs echo

对于ct lsprivate命令,指定-other选项将不包括已签出的文件。编辑:算了,Otzen在他两年前的回答中已经说过了。 - antred

5

如果对其他阅读这篇问题的人有所帮助,这里是VonC的Windows解决方案,稍微做了一些修改以使其能够运行为Windows脚本:

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

@echo替换为rmdir /S /Qdel /F,按照这里描述的实际删除操作执行。因此,最终脚本如下:

@echo off
setlocal
for /F "usebackq delims=" %%A in (`cleartool ls  -rec ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed" ^| find /V "-->"`) do rmdir /S /Q "%%A"
for /F "usebackq delims=" %%A in (`cleartool ls  -rec ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed" ^| find /V "-->"`) do del /F "%%A"

如果您将脚本保存为 .bat 文件并放在要清理的目录下,该脚本将通过删除自身来完成清理操作 :-)

3
如果有人阅读这篇问题并需要帮助,这里是VonC的Unix解决方案,在Windows上通过Cygwin运行需要做一些小改动。
在Cygwin中:
cleartool ls -rec | grep -v "Rule:" | grep -v "hijacked" | grep -v "eclipsed" | grep -v -- "-->" 

Cygwin的命令与VonC所提供的Unix命令类似,但请注意最后一个grep命令需要加上双破折号(--),而xargs命令则不需要。

3

由于@MilesHampson的版本返回了太多结果,我对其进行了修改,并希望将其作为批处理文件运行。

我的新文件不会在debugobj文件夹中,因此我不需要看到这些文件夹的任何结果... 我也只是在处理C#。所以这就是我需要看到的全部内容。

@echo off
setlocal

@echo Searching, please wait as this can take a while...

for /F "usebackq delims=" %%A in (`cleartool ls  -rec ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed" ^| find /V "-->" ^| find /V "obj" ^| find /V "debug"`) do  ( 
  if "%%~xA"==".cs" echo %%A
  )
)

@echo === === === === === Search Complete === === === === === === 

pause

创建一个批处理文件,将上述内容拖放到您的根项目文件夹中并运行。它将显示那些不在源代码控制中的文件。

2
ct lsprivate -other 

还可以过滤掉已检出的文件

ct lsprivate -co:列出所有已检出的文件

ct lsprivate -do:列出所有派生对象文件

ct lsprivate -other:列出所有其他私有文件


0

我按照以上所有解决方案,这是一个很好的命令。但我有一些更多的要求,以上没有涉及到,所以我对脚本进行了一些修改,并添加了以下附加点。

  1. 从列表中排除批处理文件(否则当前批处理文件也会出现在列表中)
  2. 从列表中删除目录,因为我通常只关心文件

  3. 专门针对Java开发人员,排除了target文件夹和jar文件,因为它们通常不会被检查

  4. 如果.classpath、.project和.settings文件夹与项目/模块位于同一级别,则删除这些文件夹,这是特定于Eclipse的

    @echo off
    setlocal
    
    @echo.
    @echo 正在搜索,请稍等...
    @echo.
    for /F "usebackq delims=" %%i in (`cleartool ls  -rec ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed" ^| find /V "-->" ^| find /V ".settings" ^| find /V "jar" ^| find /V "keep" ^| find /V "target" ^| find /V ".classpath"  ^| find /V ".project" ^| find /V "%~n0" `) do ( if not exist %%i\* @echo "%%i")
    
    @echo.
    @echo === === === === === 搜索完成 === === === === === === 
    @echo.
    @echo.
    
    pause
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接