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.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.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