Подтвердить что ты не робот

Командная строка для удаления всех файлов View-private ClearCase

Я ищу командную строку для удаления всех файлов и каталогов, связанных с представлением, из представления ClearCase в Windows. У меня также есть Cygwin.

script, доступный в этой статье, не совсем то, что я хочу, так как я работаю с большим количеством файлов и хотите удалить их все, не выбрав их.

4b9b3361

Ответ 1

Несколько замечаний:

  • ct lsprivate отлично подходит для динамических просмотров, а не для снимков.
  • ct ls -rec -view_only, а также ct lsprivate также перечисляют файлы с извлеченными файлами... Я не уверен, что вы хотите удалить их...

Для перечисления личных файлов (только частные, а не захваченные вами, вы можете захотеть сохранить), вам нужно иметь команду, которая:

  • учитывает пробелы в имени
  • не перечисляет контрольные или захваченные или затменные файлы или символические ссылки
  • работает как для моментальных снимков, так и для динамических представлений.
  • (бонус) не зависит от внешних команд оболочки

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

В этом списке перечислены все ваши личные файлы (пропущенные захваченные/затменные/извлеченные или не-частные, а также символические ссылки) в чистом виде Windows (не требуется внешняя зависимость оболочки).
Замените @echo "%i" на del /F "%i", и они исчезли.
Обратите внимание на двойные кавычки вокруг% i, чтобы отображать/удалять правильные файлы с пробелами в их имени. Также обратите внимание на отсутствие параметра cleartool -nxn, поскольку символические ссылки в противном случае были бы неразличимы, а файлы с закрытием-просмотром все равно не оформлялись.

Чтобы также избавиться от частных каталогов, сначала запустите команду с rmdir /S /Q "%i", а затем с помощью del /F "%i".

Ответ 2

В командной строке Windows DOS:

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

Ответ 3

Я знаю, что, вероятно, лучший способ, но я всегда возвращаюсь к этому:

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

Ответ 4

Я всегда использовал:

ct lsprivate  | xargs rm

Ответ 5

В 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 в моей среде, кроме дюжины или около того доступных, которые я действительно использую.

Обратите внимание, что если вы упаковываете это как "rebuild.view" script, вы должны взять имя вида в качестве аргумента (работая извне представления - это не будет текущий вид), и тогда вы могли бы выполните очистку внутри представления, используйте другую опцию "lsview", чтобы получить необходимую информацию, и обычно уходите от временного хранилища в /tmp (хотя вам нужно кэшировать cspec где-то).

Еще одно замечание - вы хотели бы убедиться, что вы сделали ручную очистку, прежде чем позволить автоматическому освобождению. Например, не должно быть никаких проверок. В качестве альтернативы напишите script, чтобы отказаться от просмотра, если есть какие-либо проверки.

Ответ 6

Я закончил использование этой команды в Cygwin:

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

Команда sed необходима для изменения путей в стиле Windows, выводимых cleartool в пути в стиле Unix. Там, вероятно, более эффективная команда. Это вызывает много ошибок, потому что он удаляет каталог, а затем любые ранее найденные файлы типа "вид-частный" под этим каталогом не будут найдены rm. Но в конечном итоге вы получите правильный результат.

EDIT: VonC указывает, что это работает только с динамическими представлениями ClearCase

Ответ 7

  • В 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"
    
  • Синхронизация представления с проектом:
    В проводнике проекта выберите свойства потока, перейдите на вкладку "Вид", выберите свойства вида и нажмите "синхронизировать с проектом"

Ответ 8

как использовать команду cygpath вместо sed?
вы можете найти дополнительную информацию о cygpath.exe здесь:
текст ссылки

способ связать cygpath.exe с другими программами - использовать xargs.
пример: processA | xargs cygpath -u > my-path-in-unix-format.txt

Ответ 9

В чистых окнах вы можете сделать это:

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