背景
因为要跑的实验比较多,几个实验分配在几台服务器上跑,导致实验结果存在不同的服务器上,现在希望把他们copy到一起
方法
之前习惯于使用SCP命令在多个服务器之间传输,大多数情况都好用,但有几个小问题
- 无法跳过已存在的文件:比如一个有很多文件的文件夹,在传输的过程中意外中断,后面你再传的时候只好从头开始,把已存在的文件再覆盖一次
- 无法过滤部分文件:比如只想传输模型的预测结果
*.nii.gz``*.json
文件到另一台服务器,但是文件夹里有体积很大的模型文件并不需要传过去,scp无法方便地取消这些模型文件
rsync介绍
rsync 命令格式: rsync [OPTION] SRC DEST
OPTION选项 | 功能 |
---|---|
-a | 这是归档模式,表示以递归方式传输文件,并保持所有属性,它等同于-r、-l、-p、-t、-g、-o、-D 选项。-a 选项后面可以跟一个 --no-OPTION,表示关闭 -r、-l、-p、-t、-g、-o、-D 中的某一个,比如-a --no-l 等同于 -r、-p、-t、-g、-o、-D 选项。 |
-r | 表示以递归模式处理子目录,它主要是针对目录来说的,如果单独传一个文件不需要加 -r 选项,但是传输目录时必须加。 |
- -progress | 表示在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、 同步的文件传输速度等。 |
- -exclude=PATTERN | 表示指定排除不需要传输的文件,等号后面跟文件名,可以是通配符模式(如 *.txt)。 |
-u | 表示把 DEST 中比 SRC 还新的文件排除掉,不会覆盖。 |
-z | 加上该选项,将会在传输过程中压缩。 |
例子
rsync -avP --exclude=*.model --exclude=*.txt --exclude=*.pkl --exclude=*.npz 10.211.43.112:/home/data/xxx/nnUNet_trained_models/nnUNet/Model6 /home/data/xxx/nnUNet_trained_models/nnUNet/
这样就实现了排除 *.model
*.txt
*.pkl
这几类文件,将剩余文件copy到本地