如何将递归文件从一个目录移动到另一个目录,并且同名文件重命名较旧的文件并附加其修改时间

如何将递归文件从一个目录移动到另一个目录,并且同名文件重命名较旧的文件并附加其修改时间

我需要将所有文件从一个驱动器递归移动到另一个驱动器,并且相同的路径/名称文件如果不同,则通过在文件名后附加修改时间来重命名较旧的文件。相同路径/名称的文件将被覆盖。文件大小在 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)

相关内容