我正在运行以下命令,以便在加载新文件之前从gcs存储桶中删除文件。
gsutil ls gs://mybucket/subbucket/*
如果存储桶中没有文件,则会抛出" CommandException:一个或多个URL没有匹配对象"。
我希望删除文件,如果存在而不抛出错误。
tf.train.Saver()
如何在不必明确处理异常的情况下重写此内容?或者,如何在批处理脚本中最好地处理这些异常?
答案 0 :(得分:6)
试试这个:
gsutil -m rm gs://mybucket/foo/* 2> /dev/null || true
或者:
gsutil -m ls gs://mybucket/foo/* 2> /dev/null || true
这具有抑制stderr(它被定向到/dev/null
)的效果,并且即使失败也会返回成功错误代码。
答案 1 :(得分:0)
您可能不想忽略所有错误,因为它可能表示找不到该文件的某些内容。使用以下脚本,您只会忽略一个或多个匹配不是对象的网址'但会告诉你一个不同的错误。如果没有错误,它只会删除文件:
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
这会将stderr传递给临时文件,并会检查消息以决定是忽略它还是显示它。
它也适用于单个文件删除。我希望它有所帮助。
参考文献:
How to grep standard error stream
Bash Reference Manual - Redirections
答案 2 :(得分:0)
您可能希望rsync将文件和文件夹同步到存储桶。我用它来清除存储桶中的文件夹并将其替换为构建脚本中的新文件。
gsutil rsync -d newdata gs://mybucket/data
-用新数据替换data
文件夹