删除了一堆文件和共享文件夹后,Google Drive Api列出的文件数量不稳定



我正在为客户端测试脚本。为此,我创建了大约1万个文件,并使用web UI将其上传到测试文件夹中。然后我破坏,然后删除了这个文件夹。

然后,我从客户端添加了一个共享文件夹,并使用/v3/文件列出了所有文件,其中包含了来自其他驱动器的文件。

我注意到我的脚本运行不好,因为有很多404条回复。事实证明,至少从API的角度来看,删除10k个文件对于Google Drive来说并不是即时的。列出的文件还包括我刚刚删除的列出的文件,这些文件后来被删除了。

据我所见,谷歌硬盘能够处理大约200个文件/秒。

我本来可以等一下,但后来我发现了另一个问题,因为我删除了共享文件夹,并用客户的另一个共享文件夹替换了它,所有这些文件夹都有一万个文件。不出所料,看到文件数量下降花了一些时间。但后来我看到这个数字慢慢增加,然后又减少了。

我怀疑这是添加了一个文件夹,在删除其他文件夹的同时增加了文件数量,但我不确定。

我是唯一一个经历过这种情况的人吗?API中是否有我遗漏的内容可以缓解这种情况,或者至少可以告诉我Google Drive何时结束处理所有操作?

编辑:复制步骤:

我用来创建一堆文件的代码:

#!/usr/bin/env bash
#create_lots_of_files.sh
mkdir -p lots_of_files
cd lots_of_files
for i in $(seq 10000); do
FOLDER=$(("$i"%10))
FILE="file_$i".txt
mkdir -p "$FOLDER"
echo "$FILE" > "$FOLDER/$FILE"
done

然后将此文件夹上载到您的驱动器。喝杯咖啡这需要时间。

使用api获取文件ID的代码:

#!/usr/bin/env bash
# list_ids.sh <output file path> <bearer token>
set -e
# shellcheck disable=SC2128
SCRIPTDIR="$(dirname "$(realpath "$BASH_SOURCE")")"
PAGE_SIZE=1000
if [[ -z $1 ]]; then
echo "First argument must specify a path to store the files ids"
exit 1
fi
IDS_FILE="$1"
if [[ -z $2 ]]; then
echo "Second argument must be the bearer token"
exit 1
fi
ACCESS_TOKEN="$2"
if ! jq -h &> /dev/null; then
echo "error: need to install jq: sudo apt-get install jq"
exit 1
fi
cd "$SCRIPTDIR"
BASE_QUERY_STRING="https://www.googleapis.com/drive/v3/files
?corpora=allDrives
&includeItemsFromAllDrives=true
&supportsAllDrives=true
&pageSize=$PAGE_SIZE
"
true > "$IDS_FILE"
while true; do
# If pageToken is empty then it defaults to the first page
QUERY_STRING="$BASE_QUERY_STRING&pageToken=$NEXT_PAGE_TOKEN"
RESPONSE="$(curl 
--silent 
--fail 
-H 'GData-Version: 3.0' 
-H "Authorization: Bearer $ACCESS_TOKEN" 
--request GET 
"$QUERY_STRING" 
)"
jq -r '.files | map(select(.mimeType != "application/vnd.google-apps.folder")) | .[].id' <<<"$RESPONSE" | tee -a "$IDS_FILE"
NEXT_PAGE_TOKEN="$(jq -r '.nextPageToken' <<< "$RESPONSE")"
if [[ -z "$NEXT_PAGE_TOKEN" || "$NEXT_PAGE_TOKEN" = 'null' ]]; then
break
fi
done

使用跟踪文件数量

while true; do date; ./list_ids.sh ids.txt '<bearer token>' | wc -l; sleep 5; done

删除驱动器上的lots_of_files并观察文件数。

我可以告诉你,你不是第一个。根据我的经验,你报告的这种行为是意料之中的,你会看到,需要在所有谷歌工作区服务器上复制更改,这有一个延迟,通常被称为"传播",正如帮助中心的这篇文章中所提到的https://support.google.com/drive/answer/7166529.

如果您与许多文件或子文件夹共享或取消共享文件夹,则可能需要一段时间才能更改所有权限。如果一次更改大量编辑或查看权限,则可能需要一段时间才能看到更改。

尽管您正在执行的任务不同于仅共享文件,但由于您正在处理的文件和文件夹数量很大,而且您正在处理共享文件夹,因此您将遇到延迟。如其他帮助中心文章中所述https://support.google.com/a/answer/7514107,您可以期望在24小时内完全应用更改。

我曾与谷歌工作区管理员一起协助过多次数据迁移,这在处理大量数据时也是意料之中的事。

最新更新