gsutil で大量の画像をアップロードした後、奇妙な問題に遭遇しました。アップロードされたファイルは Google Cloud Console で見ることができず、「gsutil ls」を実行しようとすると、gsutil 自体がエラーを出します。ディレクトリ名に「å」または「Å」とスペースを一緒に使用することに関連していると99%確信しています。
すべてのアップロードは、ルート フォルダー (複数レベルのサブディレクトリにある大規模な画像コレクション) から再帰的に行われました。ファイルを再度アップロードしようとすると、ファイルが既に存在するため、gsutil はそれらをスキップします。そのため、アップロード機能が何らかの処理を行います。リストとダウンロードと同じようには機能しません。
例:
gsutil cp -R -n /Volumes/Photos/digitalfotografen.dk/2009/2009-05-30\ Søgården\ -\ bryllup/ gs://digitalfotografen/2009/
Skipping existing item: gs://digitalfotografen/2009/2009-05-30 Søgården - bryllup/Søgården 0128.CR2
...
OK - ファイルはそこにありますが、Google Cloud Console を介してディレクトリを参照すると、「結果はありません」と表示されます。
また:
gsutil ls gs://digitalfotografen/2009/2009-06-27 Søgården - reklamefotos/20090627_IMG_0128.CR2
CommandException: "ls" command does not support "file://" URIs. Did you mean to use a gs:// URI?
スペースをエスケープしようとしたり、さまざまな方法で引用符を使用したりしましたが、うまくいきませんでした。
さて、興味深いのは次のとおりです。
gsutil cp -R -n /Volumes/Photos/digitalfotografen.dk/2009/2009-05-30\ Søgården\ -\ bryllup/ gs://digitalfotografen/2009/
Copying file:///Volumes/Photos/digitalfotografen.dk/2009/2009-05-30 Søgården - bryllup/Søgården 0128.CR2 [Content-Type=application/octet-stream]...
ここでは、特にソース側でスペースをエスケープしてフォルダーをコピーしました。これで、ファイルが再度アップロードされます。これにより、同じ名前の 2 つ目のフォルダが作成され (少なくとも Cloud Console ではそのように表示されます)、両方のフォルダでファイルが表示されるようになります。
デンマーク語の文字セットで標準の US ASCII の外にある 3 つの異なる文字 ("æøå" と大文字の "ÆØÅ") を使用していますが、問題は "å" と "Å"のみに影響するようです。正常に動作します。私の推測では、"å" と "Å" は ASCII ではまったく異なるものに変換される可能性があり、gsutil がルート フォルダーの名前に基づいて独自にディレクトリの名前付けを処理できる場合 (複数レベルの再帰を行う) ) ただし、ユーザーがルート フォルダーの名前をエスケープして指定すると機能します。
これは gsutil の問題ではなく python の問題である可能性がありますが、寄せ集めのシェル スクリプト以外のプログラミングに関する知識がほとんどないため、これを特定する資格はありません。