Командная строка для удаления всех приватных файлов ClearCase - PullRequest
15 голосов
/ 16 декабря 2008

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

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

Ответы [ 9 ]

22 голосов
/ 16 декабря 2008

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

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

6 голосов
/ 23 августа 2012

Под приглашением Windows DOS:

for /f "delims=" %f in ('cleartool lspriv -s -do -oth ^| sort /r') do @del /f /q "%f"
5 голосов
/ 17 декабря 2008

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

ct lspriv | grep -v checkedout | xargs rm -rf
3 голосов
/ 16 декабря 2008

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

ct lsprivate  | xargs rm
2 голосов
/ 28 декабря 2008

В 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', вы бы взяли имя представления в качестве аргумента (работая вне представления - это не будет текущее представление), и вы могли бы затем выполнить очистите представление, используйте другую опцию 'lsview', чтобы получить необходимую информацию, и обычно уходите из временного хранилища в / tmp (хотя вам нужно где-то кешировать cspec).

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

1 голос
/ 28 июня 2011
  1. Из CLI Для просмотра списка приватных файлов выполните приведенную ниже команду

    for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do @echo "%i"
    
  2. Из командной строки, выполненной ниже, введите команду для удаления просмотра личных файлов

    for /F "usebackq delims=" %i in (`cleartool lspriv -s ^| find /V "Rule:" ^| find /V "hijacked" ^| find /V "eclipsed"`) do del /F "%i"
    
  3. Синхронизация представления с проектом:
    В проводнике проекта выберите свойства потока, перейдите на вкладку представления, выберите свойства представления, затем нажмите «синхронизировать с проектом»

1 голос
/ 16 декабря 2008

В итоге я использовал эту команду в Cygwin:

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

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

РЕДАКТИРОВАТЬ: VonC указывает, что это работает только с динамическими представлениями ClearCase

0 голосов
/ 11 февраля 2011

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

for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i"
0 голосов
/ 16 декабря 2008

как насчет использования команды cygpath вместо sed?
Вы можете найти больше информации о cygpath.exe здесь:
текст ссылки

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

...