如何比较两个目录并将唯一的文件(名称或内容)移动到其他地方的第一个目录?

How to compare two directories and move files unique (in name or contents) to the 1st directory elsewhere?

我有两个包含文件夹和文件的目录,如下所示

├───dir1
│   │   alpha
│   │   beta.txt
│   │   gamma.exe
│   │   zeta.BIN
│   │
│   ├───delta
│   │       iota.arc
│   │       theta.mp3
│   │
│   └───epsilon
│       │   upsilon.wfbs
│       │
│       └───phi
│               pi.dll
│               sigma.tar
│
└───dir2
    │   alpha
    │   beta.txt
    │   gamma.exe
    │
    ├───delta
    │       eta.zip
    │       iota.arc
    │       theta.mp3
    │
    └───epsilon
        │   upsilon.wfbs
        │
        └───phi
                kappa.dll
                sigma.tar

有些文件的文件名相同,但内容不同。例如,如果 alphaiota.arcdir1 中的内容与 dir2 中的内容不同,则 dir3(其中文件不同于 dir1dir2 被移动了)应该是这样的。

├───dir3
|   |   alpha
│   │   zeta.BIN
│   │
│   ├───delta
│   │       iota.arc
│   │
│   └───epsilon
│       │
│       └───phi
│               pi.dll

您可以使用 jdupes 来执行此操作,如下所示:

Windows:

jdupes.exe -O -R -d -N dir2 dir1
robocopy dir1 dir1 /S /MOVE
rename dir1 dir3
rmdir /S /Q dir2

Linux:

#! /bin/sh
./jdupes -O -R -d -N ./dir2 ./dir1
find ./dir1 -type d -empty -delete
mv ./dir1 ./dir3
rm -rf ./dir2

注意:这些 scripts/commands 只有在与目标目录相同的目录(该目录还必须包含 jdupes 二进制文件)中执行时才有效。