svn status | grep '\!' | awk '{print $2}' | tee list.$$ | xargs svn revert
xargs svn delete < list.$$
rm list.$$
このtee
コマンドは、T パイプ継手のようなものです。出力の 1 つのコピーが各名前付きファイルに送られ、別のコピーが標準出力に送られます。ここでは、ファイルを 1 つだけ指定しました。この名前list.$$
は、スクリプトが他のプロセスのファイルを踏みにじるのを防ぐ簡単な方法です。mktemp
より安全で予測しにくい名前を作成するために使用できるようなプログラムがあります。OTOH、敵対的な環境で実行していない場合、問題になる可能性はほとんどありません. 本当に注意している場合はtrap
、ファイルが確実にクリーンアップされるように を作成します。
tmp=${TMPDIR:-/tmp}/list.$$
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
svn status | grep '\!' | awk '{print $2}' | tee $tmp | xargs svn revert
xargs svn delete < $tmp
rm $tmp
trap 0
他にも試すことができるトリックはありますが、少なくともそれらのいくつかは、順次操作を保証しません。たとえば、次のプロセス置換bash
:
svn status | grep '\!' | awk '{print $2}' | tee >(xargs svn revert) | xargs svn delete
各ファイルは元に戻されて削除されますが、順序は予測できません。