在 GitHub 上编辑

move

别名为 dvc mv

重命名一个使用 .dvc 文件跟踪的文件或目录,并修改该 .dvc 文件以反映更改。如果文件或目录具有相同的基名称(常见情况),则该 .dvc 文件也会被重命名。

概要

usage: dvc move [-h] [-q | -v] src dst

positional arguments:
  src            Source path to a data file or directory.
  dst            Destination path.

描述

当某个 src 文件或目录之前已通过 dvc adddvc import 添加到项目中并创建了 .dvc 文件(其中 src 作为输出)时,dvc move 非常有用。

⚠️ dvc move 不支持重命名阶段输出(参见 dvc.yaml),必须手动重命名。

请注意,src 本身可能是缓存中对应数据的硬链接或副本。此命令不会更改缓存中的文件。

dvc move 的行为类似于 mv src dst,将 src 移动到指定的 dst 路径,同时还会相应地重命名并更新对应的 .dvc 文件。如果目标路径是一个已存在的目录,则源文件或目录将连同其对应的 .dvc 文件一起移动到该文件夹中。

让我们设想以下场景:

$ dvc add data.csv

这会创建一个 data.csv.dvc 文件,内容如下:

outs:
  - md5: c8263e8422925b0872ee1fb7c953742a
    path: data.csv

如果我们使用类似 mv data.csv other.csv 的普通方式移动数据文件,DVC 将无法知道我们已将 data.csv 的路径更改为 other.csv,因为旧路径仍保留在相应的 .dvc 文件中。dvc move 会自动更新该 path,避免用户手动编辑:

$ dvc move data.csv other.csv
$ cat other.csv.dvc
outs:
  - md5: c8263e8422925b0872ee1fb7c953742a
    path: other.csv

注意,.dvc 文件名已更改为 other.csv.dvc

重命名阶段输出

dvc move 不适用于此情况,但可以手动完成。例如,我们想在以下 dvc.yaml 中将阶段输出从 keras.h5 重命名为 model.h5

stages:
  train:
    ...
    outs:
    - keras.h5

首先,在 dvc.yamltrain 阶段中更改输出名称,并将 .gitignore 文件中的 /keras.h5 更新为 /model.h5。然后,我们重命名现有的模型文件:

$ mv keras.h5 model.h5

通常,某个阶段的输出是另一个阶段的依赖项,从而形成一个依赖图。在这种情况下,您可能还需要更新 dvc.yamldeps 字段的 path

最后,我们运行带 -f 选项的 dvc commit 强制将更改保存到缓存中:

$ dvc commit -f

选项

  • -h, --help - 打印使用说明/帮助信息,然后退出。

  • -q, --quiet - 不向标准输出写入任何内容。如果没有问题则以 0 退出,否则以 1 退出。

  • -v, --verbose - 显示详细的跟踪信息。

示例:更改文件名

我们首先使用 dvc add 让 DVC 跟踪文件,然后使用 dvc move 更改其名称。

$ dvc add data.csv
...
$ tree
.
├── data.csv
└── data.csv.dvc

$ dvc move data.csv other.csv
...
$ tree
.
├── other.csv
└── other.csv.dvc

示例:更改文件位置

我们使用 dvc add 命令通过 DVC 跟踪一个文件,然后使用 dvc move 修改其位置。如果目标路径是一个已存在的目录,则数据文件将以原文件名移动到该目录中。请注意,对应的 .dvc 文件(例如 data.csv.dvc)也会被一同移动。

$ tree
.
├── data
│   └── foo
└── data2
    └── subdir

$  dvc add data/foo
...
$  tree
.
├── data
│   ├── foo
│   └── foo.dvc
└── data2
    └── subdir

$ dvc move data/foo data2/subdir/
...
$ tree
.
├── data
└── data2
    └── subdir
        ├── foo
        └── foo.dvc

示例:移动一个目录

让我们尝试对通过 dvc import 从外部 DVC 仓库 导入的整个目录执行相同操作。注意,与之前的情况一样,对应的 .dvc 文件也会被移动。

$ dvc import ../another-repo data
...
$ tree
.
├── data
│   ├── bar
│   └── foo
└── data.dvc

$ dvc move data data2/data3
...
$ tree
.
└── data2
    ├── data3
    │   ├── bar
    │   └── foo
    └── data3.dvc
内容

🐛 发现问题?告诉我们!或者修复它:

在 GitHub 上编辑

有疑问?加入我们的聊天,我们会为您提供帮助:

Discord 聊天