Windows の ClearCase ビューからすべてのビュー プライベート ファイルとディレクトリを削除するコマンド ラインを探しています。Cygwinも利用できます。
多数のファイルを扱っており、ファイルを 1 つずつ選択せずにすべて削除したいので、この記事で使用できるスクリプトは私が望んでいるものとはまったく異なります。
Windows の ClearCase ビューからすべてのビュー プライベート ファイルとディレクトリを削除するコマンド ラインを探しています。Cygwinも利用できます。
多数のファイルを扱っており、ファイルを 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"
これにより、すべてのプライベート ファイルが一覧表示されます (ハイジャック/Eclipse/チェックアウトまたは非プライベート ファイルとシンボリック リンクはスキップされます)。
に置き換える@echo "%i"
とdel /F "%i"
、それらはなくなります。
名前にスペースが含まれるファイルを適切に表示/削除するために、%i を二重引用符で囲むことに注意してください。また、cleartool パラメーター -nxn がないことにも注意してください。そうしないと、シンボリック リンクが区別できず、ビュー プライベート ファイルが修飾されないためです。
プライベート ディレクトリも削除するには、最初にコマンドを実行し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(動的ビュー)では、ビューのプライベートファイルを削除するための非常に効果的な手法の1つは、ビューを削除することです。最初に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からのエラーを失います-私が実際に使用している数十のアクセス可能なVOBを除いて、私の環境には100を超える表示されているがアクセスできないVOBがあります。
これを' rebuild.view
'スクリプトとしてパッケージ化する場合は、ビュー名を引数として取り(ビューの外部から作業します。現在のビューではありません)、ビューの内部でクリーンアップを実行できます。必要な詳細を取得するための別の「lsview」オプション。通常、/ tmpの一時ストレージから離れます(ただし、cspecをどこかにキャッシュする必要があります)。
注意すべきもう1つのポイントは、自動を解除する前に、手動でクリーンアップを実行したことを確認することです。たとえば、チェックアウトはありません。または、チェックアウトがある場合にビューのドロップを拒否するスクリプトを記述します。
Cygwinでこのコマンドを使用することになりました:
cleartool ls -recurse -view_only | sed -e 's:\\:/:g' | xargs rm -r
sed は、cleartool によって出力された Windows スタイルのパスを Unix スタイルのパスに変更するために必要です。おそらくもっと効率的なコマンドがあります。これは、ディレクトリを削除するため、多くのエラーをスローし、そのディレクトリの下で以前に見つかったビュー プライベート ファイルは rm によって検出されなくなります。しかし、最終的には正しい結果が得られます。
編集: VonC は、これは動的な ClearCase ビューでのみ機能することを指摘しています。
純粋なウィンドウでは、これを行うことができます:
for /F "delims=" %i IN ('ct lsprivate') DO rm -rf "%i"
what about use the of cygpath command instead of sed?
you can found more info about cygpath.exe here:
link text
a way to link cygpath.exe with other programs is to use xargs.
example: processA | xargs cygpath -u > my-path-in-unix-format.txt