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 add 或 dvc 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.dvcouts:
- md5: c8263e8422925b0872ee1fb7c953742a
path: other.csv注意,.dvc 文件名已更改为 other.csv.dvc。
重命名阶段输出
dvc move 不适用于此情况,但可以手动完成。例如,我们想在以下 dvc.yaml 中将阶段输出从 keras.h5 重命名为 model.h5:
stages:
train:
...
outs:
- keras.h5首先,在 dvc.yaml 的 train 阶段中更改输出名称,并将 .gitignore 文件中的 /keras.h5 更新为 /model.h5。然后,我们重命名现有的模型文件:
$ mv keras.h5 model.h5最后,我们运行带 -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