2017-03-21 132 views
0

次のコマンドを実行して、新しいファイルをロードする前にgcsバケットからファイルを削除しています。バケツでファイルがない場合はファイルが存在しない場合、gsutil lsコマンドとrmコマンドのエラーを処理します。

gsutil -m rm gs://mybucket/subbucket/* 

は、それが「CommandExceptionを:1つのまたは複数のURLが何のオブジェクトに一致しない」がスローされます。

エラーがスローされずにファイルが存在する場合、ファイルを削除したいと思います。

gsutil ls gs://mybucket/subbucket/*

と同じエラーがどのように私は明示的に例外を処理することなく、これを書き換えることができますがありますか?または、これらの例外をバッチスクリプトで最もうまく処理する方法は?これは、標準エラー出力を抑制すること(それが/dev/nullに向けています)、さらには失敗に成功エラーコードを戻す効果がある

gsutil -m ls gs://mybucket/foo/* 2> /dev/null || true 

gsutil -m rm gs://mybucket/foo/* 2> /dev/null || true 

または:

答えて

1

はこれを試してみてください。

+0

感謝。私はWindowsのバッチスクリプトでそれを次のように変更しました。 'gsutil -m rm gs:// mybucket/foo/* 2> nul ||真 – user1311888

0

ファイルが見つからないことを示す可能性があるため、すべてのエラーを無視したくない場合があります。次のスクリプトでは、「1つまたは複数のURLはオブジェクトに一致しませんでした」だけを無視しますが、別のエラーを通知します。一時ファイルに

gsutil -m rm gs://mybucket/subbucket/* 2> temp 
if [ $? == 1 ]; then 
    grep 'One or more URLs matched no objects' temp 
    if [ $? == 0 ]; then 
     echo "no such file" 
    else 
     echo temp 
    fi 
fi 
rm temp 

この意志パイプ標準エラー出力し、それを無視するか、それを表示するかどうかを決定するためのメッセージをチェックします:エラーがない場合、それは単にファイルを削除します。

また、単一ファイルの削除にも使用できます。私はそれが助けて欲しい

参考文献:

How to grep standard error stream
Bash Reference Manual - Redirections

関連する問題