Командная строка для удаления всех файлов View-private ClearCase
Я ищу командную строку для удаления всех файлов и каталогов, связанных с представлением, из представления ClearCase в Windows. У меня также есть Cygwin.
Скрипт, ansible в этой статье , не совсем то, что я хочу, так как я работаю с большим количеством файлов и хочу удалить их все, не выбрав их.
- Как установить Python 2.7 с библиотеками Unix на Cygwin
- Включить собственные символические ссылки NTFS для Cygwin
- VIM, показывающий «m» возле белого пространства на Cygwin
- Использование SQLite3 с Cygwin
- Ошибка «плохого адреса» при доступе к / dev / clipboard в Cygwin
- Откройте текстовый файл в VIM cygwin
- Скопировать файлы с частичной поддержкой резюме? (Win / Cygwin)
- Возможно ли / хорошая практика использовать один и тот же закрытый ключ для двух серверов для входа без пароля с одного и того же рабочего места / локального сервера?
- Обновление и установка пакетов через командную строку Cygwin?
- Сменить каталог на сетевой диск в Cygwin
- Как ограничить время работы скрипта BASH
- Cygwin cygdrive и Windows Command Prompt
- Завершение табуляции для аргументов команды не работает в Cygwin из-за суффикса `.exe`
Несколько замечаний:
-
ct lsprivate
подходит для динамических просмотров, а не для снимков -
ct ls -rec -view_only
а такжеct lsprivate
также перечисляет файлы с извлеченными файлами … Я не уверен, что вы хотите удалить их …
Для enums личных файлов (только частные, а не захваченные вами, вы можете захотеть сохранить), вам нужно иметь команду, которая:
- учитывает пробелы в названии
- не перечисляет проверки или захваченные или затменные файлы или символические ссылки
- работает как для моментальных снимков, так и для динамических представлений
-
(бонус) не зависит от внешних команд оболочки
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, так как символические ссылки в противном случае были бы неразличимы, а файлы private-view не были бы оформлены в любом случае.
Чтобы также избавиться от частных каталогов, сначала запустите команду с помощью rmdir /S /Q "%i"
а затем с del /F "%i"
.
Под подсказкой 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
В Unix (динамические представления) одним очень эффективным методом удаления личных файлов просмотра является удаление представления. Сначала сохраните cspec. Также убедитесь, что в представлении нет проверок. Затем удалите его и заново создайте новый (одно имя, тот же cspec, одно и то же хранилище, но не личные файлы, пока вы их не создадите).
# With the view to be cleaned as your current view... ct pwv -s > /tmp/viewname viewname=$( /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=$(
Все личные файлы исчезли - и вы минимизировали использование вашего диска.
Если вам повезло работать только с одним VOB, вы можете опустить параметр « -avo
» (все VOB). Переадресация ' 2>/dev/null
' теряет ошибки из недоступных VOB-файлов. У меня в моей среде более 100 видимых, но недоступных VOB, кроме дюжины или около того доступных, которые я действительно использую.
Обратите внимание, что если вы упаковываете это как rebuild.view
« rebuild.view
», вы должны использовать представление как аргумент (работая извне представления - это не будет текущий вид), и вы могли бы сделать очистку внутри просмотрите, используйте другую опцию 'lsview', чтобы получить необходимую информацию и, как правило, уйти от временного хранилища в / tmp (хотя вам нужно кэшировать cspec где-то).
Еще одно замечание - вы хотели бы убедиться, что вы сделали ручную очистку, прежде чем позволить автоматическому освобождению. Например, не должно быть никаких проверок. Кроме того, напишите сценарий, чтобы отказаться от просмотра, если есть какие-либо проверки.
Я закончил использование этой команды в Cygwin:
cleartool ls -recurse -view_only | sed -e 's:\\:/:g' | xargs rm -r
Команда sed необходима для изменения путей в стиле Windows, выводимых cleartool в пути в стиле Unix. Вероятно, есть более эффективная команда. Это вызывает много ошибок, потому что он удаляет каталог, а затем любые ранее найденные файлы типа «вид-частный» под этим каталогом не будут найдены rm. Но в конце вы получите правильный результат.
EDIT: VonC указывает, что это работает только с динамическими представлениями ClearCase
-
Из 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"
-
Синхронизация представления с проектом:
В проводнике проекта выберите свойства streamа, перейдите на вкладку «Вид», выберите свойства вида и нажмите «Синхронизировать с проектом»,
как насчет использования команды cygpath вместо sed?
вы можете найти дополнительную информацию о cygpath.exe здесь:
текст ссылки
способ связать cygpath.exe с другими программами – использовать xargs.
пример: processA | xargs cygpath -u> my-path-in-unix-format.txt
В чистых windowsх вы можете сделать это:
for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i"