<p>gsutil cp -R dir gs://my-bucket 不复制子目录</p>

创建于 2017-09-13  ·  10评论  ·  资料来源: GoogleCloudPlatform/gsutil

我只是尝试使用以下方法复制包含多个文件和目录的目录:

gsutil -m cp -r dir gs://my-bucket

它仅将顶级文件从 dir 复制到存储桶。

我正在使用:

gsutil 版本:4.27
校验和:522455e2d24593ff3a2d3d237eefde57(确定)
博托版本:2.47.0
python 版本:2.7.6(默认,2016 年 10 月 26 日,20:30:19)[GCC 4.8.4]
操作系统:Linux 4.4.0-83-generic
多处理可用:真
使用云 sdk:错误
将云 sdk 凭据传递给 gsutil:False
配置路径:/usr/local/google/home/mfschwartz/.boto_prod_oauth
gsutil 路径:/usr/local/google/home/mfschwartz/gsutil/gsutil
编译的 crcmod: 真
通过包管理器安装:False
可编辑安装:错误

最有用的评论

有同样的问题

gsutil cp -r gs://some loc_dir

将所有 gsutils 更新到最新版本后。
确认,该前缀

gsutil cp -r -U -e -c

解决了这个问题

所有10条评论

如果所有这些子目录都满足这两个条件之一:

  • 不包含任何文件(除了更多嵌套目录或符号链接)
  • 是符号链接,或者以其他方式不被视为常规文件

那么这将按预期工作。 但是,如果子目录是包含常规文件的非符号链接目录,这似乎是一个错误(尽管我不确定为什么会发生这种情况)。

你能提供一个可重现的文件树吗?

挖了之后发现是因为我尝试复制的顶级目录有一个无效的符号链接,核心问题是gsutil遇到这种情况就放弃了(所以实际上问题与子目录无关;它只是发生了在我最初报告在第一个子目录之前遇到符号链接的情况下)。

我要指出的是,如果您在 Unix 上创建一个目录,其中包含多个具有无效符号链接的文件,这些文件在字典序上早于某些文件,并使用 Unix cp 命令尝试将它们全部复制,它会抱怨符号链接无效但完成复制其他文件:

% mkdir 复制
% 触摸再现/{1,3,4}
% ln -s /损坏的再现/2
% mkdir 新
% cp repro/* 新
cp: 不能 stat 'repro/2': 没有那个文件或目录
%ls 新的
1 3 4

我认为 gsutil 应该在遇到损坏的符号链接后同样继续运行,因为我们的指导原则是让 gsutil 的行为与 Unix 命令祖先尽可能相似。

我有一个类似的问题。 gsutil 没有复制我的一些子目录。 指定-c似乎没有帮助(无论如何我都在使用-m ,所以我什至不确定是否需要指定-c )。 子目录不是符号链接。 cp 在遇到坏文件时似乎会停止。 任何解决方法?

我还应该提到,如果我直接指向其中一个子目录来上传它,它就可以工作。 所以我对正在发生的事情不知所措。

在同步时尝试gsutil rsync -D显示此堆栈:

DEBUG: Exception stack trace:
    Traceback (most recent call last):
      File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/__main__.py", line 590, in _RunNamedCommandAndHandleExceptions
        user_project=user_project)
      File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/command_runner.py", line 372, in RunNamedCommand
        return_code = command_inst.RunCommand()
      File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/commands/rsync.py", line 1536, in RunCommand
        diff_iterator = _DiffIterator(self, src_url, dst_url)
      File "/usr/lib/google-cloud-sdk/platform/gsutil/gslib/commands/rsync.py", line 939, in __init__
        raise CommandException('Caught non-retryable exception - aborting rsync')
    CommandException: CommandException: Caught non-retryable exception - aborting rsync

CommandException: Caught non-retryable exception - aborting rsync

通过指定-U-e我能够解决这个问题。 我仍然不知道哪个文件导致 cp 和 rsync 出错,但似乎-c应该导致 cp 继续,尽管有错误。 发生此问题时,一些更有用的反馈也将有助于识别导致问题的文件并帮助用户解决该问题。

有同样的问题

gsutil cp -r gs://some loc_dir

将所有 gsutils 更新到最新版本后。
确认,该前缀

gsutil cp -r -U -e -c

解决了这个问题

我也是 - gsutil 跳过 /src 下目录中的文件
gsutil -m cp -U -e -r /src gs://bucket/prefix/

gsutil 版本:4.46
编辑: gsutil cp / rsync 将忽略它没有警告或错误消息而无权进入的任何目录。

如何复制空子目录.. gsutil 仅复制具有文件的子目录,而空的子目录将被忽略且未在目标存储桶中创建。 请帮忙

@prabhat-diwaker gsutil 跳过空目录,这是预期的行为。

@prabhat-diwaker gsutil 跳过空目录,这是预期的行为。

gsutil 是否有允许您上传空文件夹或至少包含另一个文件夹但不包含文件的文件夹的选项?

此页面是否有帮助?
0 / 5 - 0 等级