我需要将所有文件从一个驱动器递归移动到另一个驱动器,并且相同的路径/名称文件如果不同,则通过在文件名后附加修改时间来重命名较旧的文件。相同路径/名称的文件将被覆盖。文件大小在 5K 到 500M 之间。
这是我创建的测试环境的树和一些评论:
/bmrlbackup/drive1/
`-- user001
`-- directory1
`-- project001
|-- file000 #identical
|-- file001 #older same name
|-- file0011 #unique
|-- phase1
| |-- file000 #identical
| |-- file110 #unique
| |-- file999 #newer same name
| `-- phase11
| `-- file111 #unique
`-- phase2
`-- file120 #unique
/bmrlbackup/drive2/
`-- user002
`-- directory2
`-- project001
|-- file000 #identical
|-- file001 #newer same name
|-- file0012 #unique
|-- phase1
| |-- file000 #identical
| |-- file210 #unique
| `-- file999 #older same name
`-- phase2
|-- file220 #unique
`-- phase21
`-- file221 #unique
rsync 移动唯一文件的输出:
#rsync -a --ignore-existing --remove-source-files $sd1/ $dd1/
project001/
project001/file0011
project001/phase1/
project001/phase1/file110
project001/phase1/phase11/
project001/phase1/phase11/file111
project001/phase2/
project001/phase2/file120
其余要移动的文件:
#remm="ls -1 $(find $sd1/ -type f)"
/bmrlbackup/drive1/user001/directory1/project001/file000
/bmrlbackup/drive1/user001/directory1/project001/file001
/bmrlbackup/drive1/user001/directory1/project001/phase1/file000
/bmrlbackup/drive1/user001/directory1/project001/phase1/file999
这里,两个位置都有相同的文件,需要移动并覆盖目标:
/bmrlbackup/drive1/user001/directory1/project001/file000
/bmrlbackup/drive1/user001/directory1/project001/phase1/file000
这里有一些具有相同名称但内容不同的文件:
/bmrlbackup/drive1/user001/directory1/project001/file001
/bmrlbackup/drive1/user001/directory1/project001/phase1/file999
需要比较“同名不同内容”文件,旧文件需要移动重命名并附加修改日期和时间,因此如果源较新,则附加目标文件的名称并移动源,如果源较旧,然后追加源的名称并移动名称追加的源。
此过程的结果最终会将所有文件从驱动器 1 移动到驱动器 2。
拜托,拜托,请帮助!
答案1
您可以使用“diff”逐行比较文件。也看看这个帖子查找时间。然后你可以使用 mv 命令移动旧文件
答案2
在两个方向上将 rsync 与 --update 和 --backup 一起使用:
-u, --update skip files that are newer on the receiver
-b, --backup make backups (see --suffix & --backup-dir)